package projetMusee.ui;

import projetMusee.backend.Museum;
import projetMusee.facade.ApplicationFacade;

import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;

public class ReportSelectionPanel extends JPanel {

    private List<JCheckBox> fieldCheckboxes;
    private List<Museum> filteredMuseums;
    private JLabel selectedFieldsLabel;

    // === Constructeur principal ===
    public ReportSelectionPanel(List<Museum> filteredMuseums) {
        this.filteredMuseums = filteredMuseums;

        JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        splitPane.setResizeWeight(0.5);
        splitPane.setBottomComponent(createSelectionPanel());
        splitPane.setDividerLocation(400);

        setLayout(new BorderLayout());
        add(splitPane, BorderLayout.CENTER);
    }

    // Constructeur autonome avec JFrame intégrée
    public ReportSelectionPanel() {
        this(List.of()); // Liste vide par défaut

        JFrame frame = new JFrame("Sélection des champs à inclure dans le rapport");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setContentPane(this);
        frame.pack();
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH); // plein écran
        frame.setVisible(true);
    }

    private JPanel createSelectionPanel() {
        JPanel selectionPanel = new JPanel(new BorderLayout(10, 10));
        selectionPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        selectionPanel.setPreferredSize(new Dimension(800, 400));

        JPanel fieldsPanel = new JPanel(new GridLayout(0, 2, 10, 10));
        fieldsPanel.setPreferredSize(new Dimension(600, 300));

        fieldCheckboxes = new ArrayList<>();
        String[] availableFields = {
                "URL", "Adresse", "Région",
                "Catégorie", "Année de création"
        };

        for (String field : availableFields) {
            JCheckBox checkBox = new JCheckBox(field);
            checkBox.addActionListener(e -> updateSelectedFieldsLabel());
            fieldCheckboxes.add(checkBox);
            fieldsPanel.add(checkBox);
        }

        selectedFieldsLabel = new JLabel("Champs sélectionnés : (aucun)");
        selectedFieldsLabel.setFont(new Font("Roboto", Font.ITALIC, 12));

        JPanel bottomPanel = new JPanel(new BorderLayout());

        bottomPanel.add(selectedFieldsLabel, BorderLayout.SOUTH);

        selectionPanel.add(new JLabel("Sélectionnez les champs à inclure dans le rapport :"), BorderLayout.NORTH);
        selectionPanel.add(new JScrollPane(fieldsPanel), BorderLayout.CENTER);
        selectionPanel.add(bottomPanel, BorderLayout.SOUTH);

        return selectionPanel;
    }

    private void updateSelectedFieldsLabel() {
        List<String> selected = getSelectedReportFields();
        if (selected.isEmpty()) {
            selectedFieldsLabel.setText("Champs sélectionnés : (aucun)");
        } else {
            selectedFieldsLabel.setText("Champs sélectionnés : " + String.join(", ", selected));
        }
    }

    private void showPreview() {
        List<String> selectedFields = getSelectedReportFields();
        if (selectedFields.isEmpty()) {
            JOptionPane.showMessageDialog(this, "Veuillez sélectionner au moins un champ pour générer le rapport.",
                    "Attention", JOptionPane.WARNING_MESSAGE);
            return;
        }

    }

    public List<String> getSelectedReportFields() {
        List<String> selectedFields = new ArrayList<>();
        for (JCheckBox checkbox : fieldCheckboxes) {
            if (checkbox.isSelected()) {
                selectedFields.add(checkbox.getText());
            }
        }
        return selectedFields;
    }

}