package danielcortes.xyz.models.estado_resultado;

import danielcortes.xyz.models.egreso.EgresoDAO;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.YearMonth;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

public abstract class EstadoResultadoDAO {
    protected static final Logger LOGGER = Logger.getLogger(EgresoDAO.class.getName());



    public abstract List<EstadoResultado> findAll();
    public abstract EstadoResultado findById(int id);
    public abstract EstadoResultado findByMonth(YearMonth month);

    public abstract boolean insertEstadoResultado(EstadoResultado estadoResultado);
    public abstract boolean updateEstadoResultado(EstadoResultado estadoResultado);
    public abstract boolean deleteEstadoResultado(EstadoResultado estadoResultado);

    List<EstadoResultado> estadoResultadosFromResultSet(ResultSet rs) throws SQLException {
        List<EstadoResultado> estadoResultadoList = new ArrayList<>();

        while(rs.next()) {
            EstadoResultado estadoResultado = new EstadoResultado();
            estadoResultado.setId(rs.getInt("id"));
            estadoResultado.setMes(YearMonth.from(LocalDate.parse(rs.getString("mes"))));
            estadoResultado.setCostoVenta(rs.getInt("costo_venta"));
            estadoResultado.setCuentaCorrienteFactura(rs.getInt("cuenta_corriente_factura"));
            estadoResultado.setCuentaCorrienteBoleta(rs.getInt("cuenta_corriente_boleta"));
            estadoResultado.setCuentaCorrienteSinRespaldo(rs.getInt("cuenta_corriente_sin_respaldo"));
            estadoResultado.setRemuneraciones(rs.getInt("remuneraciones"));
            estadoResultado.setFiniquitos(rs.getInt("finiquitos"));
            estadoResultado.setAguinaldo(rs.getInt("aguinaldo"));
            estadoResultado.setBonosPersonal(rs.getInt("bonos_personal"));
            estadoResultado.setHonorariosContador(rs.getInt("honorarios_contador"));
            estadoResultado.setArriendo(rs.getInt("arriendo"));
            estadoResultado.setAgua(rs.getInt("agua"));
            estadoResultado.setLuz(rs.getInt("luz"));
            estadoResultado.setGas(rs.getInt("gas"));
            estadoResultado.setTelefono(rs.getInt("telefono"));
            estadoResultado.setOtroServicio(rs.getInt("otro_servicio"));
            estadoResultado.setPpm(rs.getDouble("ppm"));
            estadoResultado.setIvaFavor(rs.getInt("ivaFavor"));

            estadoResultadoList.add(estadoResultado);
        }
        return estadoResultadoList;
    }
}
