/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package com.arrebol.taxiservicios.beans.report;

import com.arrebol.taxiservicios.beans.Datatable;
import com.arrebol.taxiservicios.beans.TaxiGenericBean;
import com.arrebol.taxiservicios.controller.predio.PredioController;
import com.arrebol.taxiservicios.controller.predio.PreventaController;
import com.arrebol.taxiservicios.model.enums.GenericEnumType;
import com.arrebol.taxiservicios.model.enums.PersonType;
import com.arrebol.taxiservicios.model.predio.AbonoProyecto;
import com.arrebol.taxiservicios.model.predio.Predio;
import com.arrebol.taxiservicios.model.view.PersonListView;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.primefaces.event.ReorderEvent;
import org.primefaces.event.RowEditEvent;

/**
 *
 * @author Usuario
 */
@Named("propietarioBean")
@ViewScoped
public class PropietarioBean extends TaxiGenericBean implements Serializable, Datatable{
    private List<PersonListView> propietarioBuscar;
    private String propietarioSeleccionado;
    private Date fechaHoy;
    private List<Predio> listaPredios;
    final Logger logger = LogManager.getLogger(PropietarioBean.class);
    private List<AbonoProyecto> listaAbonoProyecto;
    private PredioController controladorPredio;
    private PreventaController controladorPreventa;
    
    //Inicializacion del proyecto
    @PostConstruct
    public void init() {
        setControladorPreventa(new PreventaController());
        fechaHoy = new Date();
        setControladorPredio(new PredioController());
        setPropietarioBuscar(controladorPreventa.findListOfPersonsByType(PersonType.PROVIDER, getLoggedUser().getLocation()));
    }
    
    public List<AbonoProyecto> buscarAbonosPorPredio(Predio predio){
        logger.info("buscarAbonosPorPredio");
        try {
            setListaAbonoProyecto(getControladorPredio().fillAllAbonoProyecto(predio));
            logger.info("buscarAbonosPorPredio loaded size " + listaAbonoProyecto != null ? listaAbonoProyecto.size() : 0);
        } catch (Exception e) {
            logger.error("getDetails", e);
        }
        return null == listaAbonoProyecto ? new ArrayList<>() : listaAbonoProyecto;
    }
    
       public String validarColor(GenericEnumType valorComparar, Date fechaPagar) {
        if (valorComparar.equals(GenericEnumType.ENABLED)) {
            return "datatableRowGreen";
        } else if (fechaPagar.before(fechaHoy)) {
            Calendar fechaPagarCalendar = Calendar.getInstance();
            fechaPagarCalendar.setTime(fechaPagar);
            Calendar fechaHoyCalendar = Calendar.getInstance();
            fechaHoyCalendar.setTime(fechaHoy);
            long diferenciaEnMilisegundos = fechaPagarCalendar.getTimeInMillis() - fechaHoyCalendar.getTimeInMillis();
            long diferenciaEnDias = diferenciaEnMilisegundos / (24 * 60 * 60 * 1000);
            System.out.println("La diferencia entre las fechas es de " + diferenciaEnDias + " días.");
            if(diferenciaEnDias >=5 && diferenciaEnDias <=0){
                return "datatableRowLittle";
            }else if (diferenciaEnDias == 0){
                return "datatableRowLittle";
            }else{
                return "datatableRowEmpty";
            }
        } else if (fechaPagar.after(fechaHoy)){
            Calendar fechaPagarCalendar = Calendar.getInstance();
            fechaPagarCalendar.setTime(fechaPagar);
            Calendar fechaHoyCalendar = Calendar.getInstance();
            fechaHoyCalendar.setTime(fechaHoy);
            long diferenciaEnMilisegundos = fechaPagarCalendar.getTimeInMillis() - fechaHoyCalendar.getTimeInMillis();
            long diferenciaEnDias = diferenciaEnMilisegundos / (24 * 60 * 60 * 1000);
            if(diferenciaEnDias <=5 && diferenciaEnDias >=0){
                return "datatableRowLittle";
            }else if (diferenciaEnDias > 5 ){
                return "";
            }else{
                return "datatableRowEmpty";
            }
        }
        return "";
    }
    
    public void buscarDatos(){
        setListaPredios(controladorPredio.fillPredioDatatableByCustomer(propietarioSeleccionado));
    }

    public List<PersonListView> getPropietarioBuscar() {
        return propietarioBuscar;
    }

    public void setPropietarioBuscar(List<PersonListView> propietarioBuscar) {
        this.propietarioBuscar = propietarioBuscar;
    }

    public String getPropietarioSeleccionado() {
        return propietarioSeleccionado;
    }

    public void setPropietarioSeleccionado(String propietarioSeleccionado) {
        this.propietarioSeleccionado = propietarioSeleccionado;
    }

    public PreventaController getControladorPreventa() {
        return controladorPreventa;
    }

    public void setControladorPreventa(PreventaController controladorPreventa) {
        this.controladorPreventa = controladorPreventa;
    }

    public List<Predio> getListaPredios() {
        return listaPredios;
    }

    public void setListaPredios(List<Predio> listaPredios) {
        this.listaPredios = listaPredios;
    }

    public PredioController getControladorPredio() {
        return controladorPredio;
    }

    public void setControladorPredio(PredioController controladorPredio) {
        this.controladorPredio = controladorPredio;
    }

    public List<AbonoProyecto> getListaAbonoProyecto() {
        return listaAbonoProyecto;
    }

    public void setListaAbonoProyecto(List<AbonoProyecto> listaAbonoProyecto) {
        this.listaAbonoProyecto = listaAbonoProyecto;
    }

    public Date getFechaHoy() {
        return fechaHoy;
    }

    public void setFechaHoy(Date fechaHoy) {
        this.fechaHoy = fechaHoy;
    }
    
    
    
    
    
    @Override
    public void editRow(RowEditEvent event) {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }

    @Override
    public void onRowCancel(RowEditEvent event) {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }

    @Override
    public void onRowReorder(ReorderEvent event) {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }

    @Override
    public void addRow() {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }

    @Override
    public void deleteRow() {
        throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
    }
    
}
