/*
 * 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.crov.prase.catalog;

import com.arrebol.taxiservicios.beans.Datatable;
import com.arrebol.taxiservicios.beans.TaxiGenericBean;
import com.arrebol.taxiservicios.controller.admin.GenericValidationController;
import com.arrebol.taxiservicios.model.enums.GenericEnumType;
import com.crov.prase.controller.catalog.TipoRiesgoController;
import com.crov.prase.model.catalog.Hospitales;
import com.crov.prase.model.catalog.TipoRiesgo;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
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 Crov
 */
@Named("tipoRiesgoBean")
@ViewScoped
public class TipoRiesgoBean extends TaxiGenericBean implements Serializable, Datatable {

    private static final long serialVersionUID = -136031528440947006L;
    final Logger logger = LogManager.getLogger(TipoSiniestroBean.class);

    private TipoRiesgoController tipoRiesgoController;
    private GenericValidationController genericController;
    private List<TipoRiesgo> listTipoRiesgo;
    private TipoRiesgo selectedTipoRiesgo;

    private String name;

    @PostConstruct
    public void init() {
        logger.info("init");
        try {
            loadBundlePropertyFile();
            setTipoRiesgoController(new TipoRiesgoController());
            cargarListTipoRiesgo();
        } catch (Exception e) {
            logger.error(e);
        }
    }

    private void cargarListTipoRiesgo() {
        logger.info("cargarTipoRiesgo()");
        try {
            setListTipoRiesgo(getTipoRiesgoController().fillTipoRiesgoByLocation(getLoggedUser().getLocation()));
        } catch (Exception e) {
            logger.error("cargarTipoRiesgo() " + e);
        }
    }

    @Override
    public void editRow(RowEditEvent event) {
        logger.info("editRow");
        try {
            TipoRiesgo tipoSiniestro = (TipoRiesgo) event.getObject();
            if (tipoSiniestro != null) {
                getTipoRiesgoController().addTipoRiesgo(tipoSiniestro, getLoggedUser(), false);
                cargarListTipoRiesgo();
                logger.info("Tipo de riesgo actualizado correctamente ");
                showMessage(FacesMessage.SEVERITY_INFO, "Tipo de riesgo actualizado", "Tipo de riesgo actualizado correctamente");
            } else {
                logger.error("Ocurrió un error al actualizar el tipo de riesgo");
                showMessage(FacesMessage.SEVERITY_ERROR, "Error", "Ocurrió un error al actualizar el tipo de riesgo");
            }
        } catch (Exception e) {
            showMessage(FacesMessage.SEVERITY_FATAL, "Error", "Ocurrió un error al actualizar el tipo de riesgo");
            logger.error("editRow()" + e);
        }
    }

    @Override
    public void onRowCancel(RowEditEvent event) {
        showMessage(FacesMessage.SEVERITY_INFO, "Edición Cancelada", ((TipoRiesgo) event.getObject()).getDescripcion());
    }

    @Override
    public void onRowReorder(ReorderEvent event) {
        showMessage(FacesMessage.SEVERITY_INFO, "Registro Movido", "De columna: " + (event.getFromIndex() + 1) + " a columna: " + (event.getToIndex() + 1));
    }

    @Override
    public void addRow() {
        logger.info("addRow");
        try {
            TipoRiesgo tipoRiesgo = new TipoRiesgo();
            tipoRiesgo.setEstatusActivo(GenericEnumType.ENABLED);
            tipoRiesgo.setLocation(getLoggedUser().getLocation());
            tipoRiesgo.setDescripcion(getName());
            getTipoRiesgoController().addTipoRiesgo(tipoRiesgo, getLoggedUser(), true);
            getListTipoRiesgo().add(tipoRiesgo);
            logger.info("Tipo de riesgo agregado correctamente ");
            showMessage(FacesMessage.SEVERITY_INFO, "Tipo de riesgo agregado", "Tipo de riesgo agregado correctamente");
        } catch (Exception e) {
            showMessage(FacesMessage.SEVERITY_ERROR, "Error", "Ocurrió un error al agregar el tipo de riesgo");
            logger.error("addRow() " + e);
        }
    }

    @Override
    public void deleteRow() {
        logger.info("deleteRow");
        try {
            getSelectedTipoRiesgo().setEstatusActivo(GenericEnumType.DISABLED);
            getTipoRiesgoController().addTipoRiesgo(getSelectedTipoRiesgo(), getLoggedUser(), false);
            getListTipoRiesgo().remove(getSelectedTipoRiesgo());
            setSelectedTipoRiesgo(null);
            cargarListTipoRiesgo();
            logger.info("Tipo de riesgo eliminado correctamente ");
            showMessage(FacesMessage.SEVERITY_INFO, "Tipo de riesgo eliminado", "Tipo de riesgo eliminado correctamente");
        } catch (Exception e) {
            showMessage(FacesMessage.SEVERITY_ERROR, "Error", "Ocurrió un error al eliminar el tipo de riesgo");
            logger.error("deleteRow()" + e);
        }
    }

    public TipoRiesgoController getTipoRiesgoController() {
        return tipoRiesgoController;
    }

    public void setTipoRiesgoController(TipoRiesgoController tipoRiesgoController) {
        this.tipoRiesgoController = tipoRiesgoController;
    }

    public GenericValidationController getGenericController() {
        return genericController;
    }

    public void setGenericController(GenericValidationController genericController) {
        this.genericController = genericController;
    }

    public List<TipoRiesgo> getListTipoRiesgo() {
        return listTipoRiesgo;
    }

    public void setListTipoRiesgo(List<TipoRiesgo> listTipoRiesgo) {
        this.listTipoRiesgo = listTipoRiesgo;
    }

    public TipoRiesgo getSelectedTipoRiesgo() {
        return selectedTipoRiesgo;
    }

    public void setSelectedTipoRiesgo(TipoRiesgo selectedTipoRiesgo) {
        this.selectedTipoRiesgo = selectedTipoRiesgo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
