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

import gestor.datos.*;
import gestor.utiles.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.logging.Level;
import javax.swing.*;

public class DlgOfrecerCitas extends javax.swing.JDialog {

    RegistroHuecos regSeleccionado = null;
    String rotulo;
    int numBotones = 0;

    public DlgOfrecerCitas(JFrame padre) {
        super(padre, true);
        initComponents();

    }

    void confirmarYTerminar(JButton boton) {
        try {
            RegistroHuecos reg = (RegistroHuecos) boton.getClientProperty("hueco");
            if (confirmar(reg.horaCita, reg.turno)) {
                if (!TablaHuecos.getTablaHuecos().sigueDisponible(reg.cola, reg.horaCita)) {
                    boton.setEnabled(false);
                    boton.setText(boton.getText() + " ocupado");
                } else {
                    regSeleccionado = reg;
                    setVisible(false);
                }
            }
        } catch (Exception exc) {
            regSeleccionado = null;
            Main.log.log(Level.WARNING, "\nError en DlgOfrecerCita ConfirmarYterminar:\n{0}", exc.getMessage().toString());
            setVisible(false);
        }
    }

    boolean confirmar(Timestamp hora, String turno) {
        try {
            String mensaje = "Confirme asignación de cita a las " + Fecha.formatoHoraHM(hora);

            if (!Global.main.getTurno().equals(turno)) {
                mensaje += "\nTurno seleccionado distinto del actual\nNO SE EMITIRÁ TIQUE";
            }
            int r = JOptionPane.showConfirmDialog(this, mensaje, "ASIGNACIÓN DE CITA", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
            return (r == JOptionPane.YES_OPTION);

        } catch (Exception exc) {
            regSeleccionado = null;
            return false;
        }
    }

    public void cargar(RegistroHuecos[] regs, String descripcion) {

        try {
            rotulo = descripcion;
            lbNombreServicio.setText(descripcion);
            Dimension dimension = new Dimension(100, 35);
            numBotones = regs.length;
            String turno = Global.main.getTurno();
            for (int i = 0; i < numBotones; i++) {
                JButton boton = new JButton();
                boton.putClientProperty("hueco", regs[i]);
                boton.setText(Fecha.formatoHoraHM(regs[i].horaCita));
                boton.setPreferredSize(dimension);
                if (!regs[i].turno.equals(turno)) {
                    boton.setBackground(boton.getBackground().darker());
                }
                boton.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        JButton yo = (JButton) e.getSource();
                        confirmarYTerminar(yo);
                    }
                });
                panelBotones.add(boton);
            }

        } catch (Exception exc) {
            Main.log.log(Level.WARNING, "\nError en DlgOfrecerCita Cargar huecos:\n{0}", exc.getMessage().toString());
            pulsadoCancelar();

        }
    }

    void pulsadoCancelar() {
        regSeleccionado = null;
        this.setVisible(false);
    }

    void ajustarPanelBotones() {
        try {
            int anchoScrollBar = scrollPane.getVerticalScrollBar().getWidth();
            int anchoPanel = scrollPane.getWidth() - anchoScrollBar - 5;
            int numColumnas = anchoPanel / 105;
            int numFilas = (numBotones + 2) / numColumnas;
            int altoPanel = numFilas * 40;
            if (altoPanel < getHeight()) {
                altoPanel = getHeight() - 20;
            }
            int separacion = (anchoPanel - (numColumnas * 100)) / (numColumnas + 1);
            ((FlowLayout) panelBotones.getLayout()).setHgap(separacion);
            panelBotones.setPreferredSize(new Dimension(anchoPanel, altoPanel));
            panelBotones.invalidate();

        } catch (Exception exc) {
            Main.log.log(Level.WARNING, "\nError en DlgOfrecerCita AjustarBotones:\n{0}", exc.getMessage().toString());
            pulsadoCancelar();
        }

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel3 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        lbNombreServicio = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        scrollPane = new javax.swing.JScrollPane();
        panelBotones = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("Asignación de cita previa");

        jPanel3.setLayout(new java.awt.GridLayout(2, 0));

        jLabel1.setFont(new java.awt.Font("Microsoft Sans Serif", 2, 18));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("Horas disponibles para el servicio");
        jLabel1.setPreferredSize(new java.awt.Dimension(269, 25));
        jPanel3.add(jLabel1);

        lbNombreServicio.setFont(new java.awt.Font("Microsoft Sans Serif", 2, 18));
        lbNombreServicio.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jPanel3.add(lbNombreServicio);

        getContentPane().add(jPanel3, java.awt.BorderLayout.NORTH);

        jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 204, 204), 4));
        jPanel1.setLayout(new java.awt.BorderLayout());

        scrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                scrollPaneComponentResized(evt);
            }
        });

        panelBotones.setBackground(new java.awt.Color(250, 250, 250));
        panelBotones.setMinimumSize(new java.awt.Dimension(15, 45));
        panelBotones.setPreferredSize(new java.awt.Dimension(15, 45));
        panelBotones.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
        scrollPane.setViewportView(panelBotones);

        jPanel1.add(scrollPane, java.awt.BorderLayout.CENTER);

        jPanel2.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 2, 8));

        jButton1.setFont(new java.awt.Font("Microsoft Sans Serif", 0, 14));
        jButton1.setText("Cancelar");
        jButton1.setMinimumSize(new java.awt.Dimension(250, 21));
        jButton1.setPreferredSize(new java.awt.Dimension(250, 45));
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jPanel2.add(jButton1);

        jPanel1.add(jPanel2, java.awt.BorderLayout.SOUTH);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents

   private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
       pulsadoCancelar();
   }//GEN-LAST:event_jButton1ActionPerformed

   private void scrollPaneComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_scrollPaneComponentResized
       ajustarPanelBotones();
   }//GEN-LAST:event_scrollPaneComponentResized
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JLabel lbNombreServicio;
    private javax.swing.JPanel panelBotones;
    private javax.swing.JScrollPane scrollPane;
    // End of variables declaration//GEN-END:variables
}
