/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package gestor.datos;

import gestor.Configuracion;
import gestor.utiles.*;
import javax.swing.grid.SortTableModel;
import javax.swing.table.*;

public class TModelCandidatos extends AbstractTableModel implements SortTableModel {

   public enum COLCANDIDATO {NOMBRE, NIF, NOTIFI, HORACITA, VINCUL, TIQUE, COLA, ESTADO, HORAASIG, HORAPRES }
   protected TablaCandidatos tabla;
   private final static String[] titulos = {"NOMBRE", "IDEN.FIS", "NOTI", "HORA CITA", "VINCUL.", "TIQUE", "COLA", "ESTADO", "Hora ASIG", "Hor.PRES"};
   private final static int[] anchosCol = {240, 90, 40, 70, 65, 58, 58, 64, 64, 64};
   protected javax.swing.JTable grid;
   Configuracion conf;

   public TModelCandidatos(javax.swing.JTable grid) {
      conf = Configuracion.instanciaUnica();
      this.grid = grid;
      tabla = TablaCandidatos.getTablaCandidatos();
      grid.setModel(this);
      anchosColumna(0);
      grid.changeSelection(0, 0, false, false);
   }

   @Override
   public Object getValueAt(int rowIndex, int columnIndex) {
      try {
         RegistroCandidatos r = tabla.getRegistroNum(rowIndex);
         switch (columnIndex) {
            case 0:
               return r.nombre;
            case 1:
               return r.nif;
            case 2:
               return r.indicadorNotificaciones();
            case 3:
               return Fecha.formatoHoraHM(r.horaCita);
            case 4:
               return r.citaVinculada;
            case 5:
               return r.numeroTicket;
            case 6:
               return r.cola;
            case 7:
               return r.estado;
            case 8:
               return Fecha.formatoHoraHM(r.horaCalculada);
            case 9:
               return Fecha.formatoHoraHM(r.horaPresente);
            default:
               return "*";
            }
      } catch (Exception exc) {
         return "??";
      }
   }

   @Override
   public int getRowCount() {
      return tabla.recordsCount();
   }

   @Override
   public int getColumnCount() {
      return 10;
   }

   @Override
   public String getColumnName(int c) {
      return titulos[c];
   }

   public final void anchosColumna(float inc) {
      for (int i = 0; i < anchosCol.length; i++) {
         int v = anchosCol[i];
         if(inc != 0.0f) {
            v = (int)(v * inc);
         }
         grid.getColumnModel().getColumn(i).setMinWidth(0);
         grid.getColumnModel().getColumn(i).setPreferredWidth(v);
      }
   }

   String nuevoNumeroTicket(String raiz) {
      java.text.NumberFormat nf = java.text.NumberFormat.getInstance();
      nf.setMinimumIntegerDigits(3);
      return raiz + "-" + nf.format(tabla.recordsCount() + 1);
   }

   public int nifDistintos() {
      return tabla.nifDistintos();
   }

   public RegistroCandidatos getRegistro(int f) {
      return tabla.getRegistroNum(f);
   }
   final String ceros = "00";
   
   @Override
   public Object getSortValueAt(int rowIndex, int columnIndex) {
      if (columnIndex == COLCANDIDATO.TIQUE.ordinal()) {
         String s = (String) getValueAt(rowIndex, columnIndex);
         if (s.length() > 1) {
            int p = s.indexOf('-');
            String numero = s.substring(p+1);
            return s.substring(0, p) + "-" + ceros.substring(0, 3 - numero.length()) + numero;
         } else {
            return "";
         }
      }
      return getValueAt(rowIndex, columnIndex);
   }
}
