/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ctecinf.swing;

import br.com.ctecinf.PDF;
import br.com.ctecinf.Database;
import br.com.ctecinf.table.Table;
import br.com.ctecinf.table.TableModel;
import java.awt.BorderLayout;
import java.awt.Desktop;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;

/**
 *
 * @author Cássio Conceição
 * @since 03/07/2019
 * @version 201907
 * @see http://ctecinf.com.br/
 */
public class RelatorioPanel extends JPanel {

    private final String title;
    private Table table;
    private JToolBar panelButtons;

    public RelatorioPanel(String query) {
        this(null, query);
    }

    public RelatorioPanel(String title, String query) {
        this.title = title;
        initUI(query);
    }

    public Table getTable() {
        return table;
    }

    private void initUI(String query) {

        setLayout(new BorderLayout());

        TableModel model = new TableModel();

        try (Connection conn = Database.openConnection(); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(query)) {

            for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
                model.addColumn(rs.getMetaData().getColumnLabel(i + 1).replace("_", " "), Database.type2Class(rs.getMetaData().getColumnType(i + 1)));
            }

            while (rs.next()) {

                Object[] row = new Object[rs.getMetaData().getColumnCount()];

                for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
                    row[i] = rs.getObject(rs.getMetaData().getColumnLabel(i + 1));
                }

                model.addRow(row);
            }

        } catch (Exception ex) {
            OptionPane.error(ex);
        }

        this.table = new Table(model);

        panelButtons = new JToolBar();
        panelButtons.setFloatable(false);
        panelButtons.setLayout(new FlowLayout(FlowLayout.RIGHT));

        addAction("Imprimir", Image.parse(Image.PRINT), new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                new PleaseWaitDialog<File>() {

                    @Override
                    public File exec() throws Exception {
                        PDF pdf = new PDF();
                        return pdf.parse(title, table);
                    }

                    @Override
                    public void end(File result) {
                        try {
                            Desktop.getDesktop().open(result);
                            result.deleteOnExit();
                        } catch (Exception ex) {
                            OptionPane.error(ex);
                        }
                    }
                }.start();
            }
        });

        JPanel panel = new JPanel(new BorderLayout());
        //panel.add(table.getFilterField(), BorderLayout.NORTH);
        panel.add(new JScrollPane(table), BorderLayout.CENTER);

        add(panelButtons, BorderLayout.NORTH);
        add(panel, BorderLayout.CENTER);
    }

    public void addAction(String label, ImageIcon icon, ActionListener action) {

        JButton button = new javax.swing.JButton(label, icon);
        button.addActionListener(action);

        panelButtons.add(button);
    }
}
