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

import com.arrebol.taxiservicios.beans.Datatable;
import com.arrebol.taxiservicios.beans.TaxiGenericBean;
import com.arrebol.taxiservicios.controller.catalog.PaquetesController;
import com.arrebol.taxiservicios.model.catalog.Paquetes;
import com.arrebol.taxiservicios.model.enums.GenericEnumType;
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 pc one
 */
@Named("paquetesBean")
@ViewScoped
public class PaquetesBean extends TaxiGenericBean implements Serializable, Datatable {

   private static final long serialVersionUID = -2400590341745672164L;
   final Logger logger = LogManager.getLogger(getClass());

   private PaquetesController paquetesController;
   private List<Paquetes> listPaquetes;
   private Paquetes selectedPaquete;

   private String nombre;
   private Double costo;
   private Integer vigencia;
   private Integer numLocaciones;
   private Integer numeroUsuarios;
   private Integer numeroProyectos;
   private Integer numeroLotes;

   @PostConstruct
   public void init() {
      logger.info("init");
      try {
         setPaquetesController(new PaquetesController());
         setListPaquetes(getPaquetesController().fillAllPaquetes());
      } catch (Exception e) {
         logger.error("init", e);
      }
   }

   public void addPaquete() {
      logger.info("addPaquete");
      try {
         setPaquetesController(new PaquetesController());
         Paquetes newPaquete = new Paquetes();
         newPaquete.setNombre(getNombre());
         newPaquete.setCosto(getCosto());
         newPaquete.setVigencia(getVigencia());
         newPaquete.setNumLocaciones(getNumLocaciones());
         newPaquete.setNumeroUsuarios(getNumeroUsuarios());
         newPaquete.setNumeroProyectos(getNumeroProyectos());
         newPaquete.setNumeroLotes(getNumeroLotes());
         newPaquete.setEstatusActivo(GenericEnumType.ENABLED);
         getPaquetesController().addPaquetes(newPaquete, getLoggedUser(), true);
         getListPaquetes().add(newPaquete);
         clearselected();
         logger.info("Nuevo paquete agregado.");
         showMessage(FacesMessage.SEVERITY_INFO, "Nuevo paquete agregado", "El nuevo paquete se agregó correctamente.");
      } catch (Exception e) {
         logger.error("Ocurrió un error al guardar el nuevo paquete:" + e);
         showMessage(FacesMessage.SEVERITY_INFO, "Error", "Ocurrió un error al guardar el nuevo paquete.");
      }
   }

   public void updatedPaquete() {
      logger.info("updatedPaquete");
      try {
         setPaquetesController(new PaquetesController());
         getSelectedPaquete().setNombre(getNombre());
         getSelectedPaquete().setCosto(getCosto());
         getSelectedPaquete().setVigencia(getVigencia());
         getSelectedPaquete().setNumLocaciones(getNumLocaciones());
         getSelectedPaquete().setNumeroUsuarios(getNumeroUsuarios());
         getSelectedPaquete().setNumeroProyectos(getNumeroProyectos());
         getSelectedPaquete().setNumeroLotes(getNumeroLotes());
         getPaquetesController().addPaquetes(getSelectedPaquete(), getLoggedUser(), false);
         clearselected();
         logger.info("Nuevo paquete actualizado.");
         showMessage(FacesMessage.SEVERITY_INFO, "Paquete actualizado", "El paquete se actualizado correctamente.");
      } catch (Exception e) {
         logger.error("Ocurrió un error al actualizado el paquete:" + e);
         showMessage(FacesMessage.SEVERITY_INFO, "Error", "Ocurrió un erro al actualizado el paquete.");
      }
   }

   public void clearselected() {
      setSelectedPaquete(new Paquetes());
      setNombre(null);
      setCosto(null);
      setVigencia(null);
      setNumLocaciones(null);
      setNumeroUsuarios(null);
      setNumeroProyectos(null);
      setNumeroLotes(null);
   }

   public void updatedForm() {
      setNombre(getSelectedPaquete().getNombre());
      setCosto(getSelectedPaquete().getCosto());
      setVigencia(getSelectedPaquete().getVigencia());
      setNumLocaciones(getSelectedPaquete().getNumLocaciones());
      setNumeroUsuarios(getSelectedPaquete().getNumeroUsuarios());
      setNumeroProyectos(getSelectedPaquete().getNumeroProyectos());
      setNumeroLotes(getSelectedPaquete().getNumeroLotes());
   }

   @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) {
      showMessage(FacesMessage.SEVERITY_INFO, "Registro Movido", "De columna: " + (event.getFromIndex() + 1) + " a columna: " + (event.getToIndex() + 1));
   }

   @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
   }

   public PaquetesController getPaquetesController() {
      return paquetesController;
   }

   public void setPaquetesController(PaquetesController paquetesController) {
      this.paquetesController = paquetesController;
   }

   public List<Paquetes> getListPaquetes() {
      return listPaquetes;
   }

   public void setListPaquetes(List<Paquetes> listPaquetes) {
      this.listPaquetes = listPaquetes;
   }

   public Paquetes getSelectedPaquete() {
      return selectedPaquete;
   }

   public void setSelectedPaquete(Paquetes selectedPaquete) {
      this.selectedPaquete = selectedPaquete;
   }

   public String getNombre() {
      return nombre;
   }

   public void setNombre(String nombre) {
      this.nombre = nombre;
   }

   public Double getCosto() {
      return costo;
   }

   public void setCosto(Double costo) {
      this.costo = costo;
   }

   public Integer getVigencia() {
      return vigencia;
   }

   public void setVigencia(Integer vigencia) {
      this.vigencia = vigencia;
   }

   public Integer getNumLocaciones() {
      return numLocaciones;
   }

   public void setNumLocaciones(Integer numLocaciones) {
      this.numLocaciones = numLocaciones;
   }

   public Integer getNumeroUsuarios() {
      return numeroUsuarios;
   }

   public void setNumeroUsuarios(Integer numeroUsuarios) {
      this.numeroUsuarios = numeroUsuarios;
   }

   public Integer getNumeroProyectos() {
      return numeroProyectos;
   }

   public void setNumeroProyectos(Integer numeroProyectos) {
      this.numeroProyectos = numeroProyectos;
   }

   public Integer getNumeroLotes() {
      return numeroLotes;
   }

   public void setNumeroLotes(Integer numeroLotes) {
      this.numeroLotes = numeroLotes;
   }

}
