package facebookpagestats.view;

import facebookpagestats.model.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.io.*;
import java.net.MalformedURLException;
import java.util.*;
import java.util.List;
import javax.swing.*;

/**
 *
 * @author trust56
 */
public class FacebookPageStatsFrame extends JFrame {

  private FacebookPageStats fbps;
  private JTable fbpsTable;
  private FacebookPageStatsTableModel fbpsTableModel;
  private JTextField pageTitleField;
  private final String fileName = "mylist.dat";

  public FacebookPageStatsFrame() {
    super();
    fbps = new FacebookPageStats();
    try {
      fbps.loadPageList(fileName);
    } catch (FileNotFoundException ex) {
      showError(ex.getMessage());
    } catch (IOException ex) {
      showError(ex.getMessage());
    }

    setTitle("Facebook oldal statisztkák");
    setLocation(40, 50);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(600, 400);
    setLayout(new BorderLayout());

    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] gs =
            ge.getScreenDevices();
    List<GraphicsConfiguration> cfgs = new ArrayList<>();
    for (int j = 0; j < gs.length; j++) {
      GraphicsDevice gd = gs[j];
      GraphicsConfiguration[] gc =
              gd.getConfigurations();
      cfgs.addAll(Arrays.asList(gc));
    }
    fbpsTableModel = new FacebookPageStatsTableModel(fbps);
    fbpsTable = new JTable(fbpsTableModel);
    fbpsTable.setRowHeight(50);
    getContentPane().add(new JScrollPane(fbpsTable), BorderLayout.CENTER);

    makeToolBar();
    fbps.addFacebookPageStatRefreshListener(new FacebookPageStatRefreshListener() {
      public void facebookPageStatRefreshed(FacebookPageStatRefreshEvent e) {
        fbpsTableModel.fireTableRowsUpdated(e.getIndex(), e.getIndex());
      }
    });
    fbps.startObserve();
  }

  private void makeToolBar() {
    JToolBar tb = new JToolBar();
    pageTitleField = new JTextField();
    tb.add(pageTitleField);
    tb.add(loadPageAction);
    tb.add(new JToolBar.Separator());
    tb.add(saveAction);
    getContentPane().add(tb, BorderLayout.NORTH);
  }
  private Action loadPageAction = new AbstractAction("Oldal figyelése") {
    public void actionPerformed(ActionEvent e) {
      String pageTitle = pageTitleField.getText();
      try {
        if (!fbps.addNewPage(pageTitle)) {
          //Halott kód: addNewPage sosem lesz hamis.
          showError("Nincs ilyen oldal");
        } else {
          fbpsTableModel.fireTableRowsInserted(fbps.size() - 1, fbps.size() - 1);
        }
      } catch (MalformedURLException ex) {
        showError(ex.getMessage());
      } catch (IOException ex) {
        showError(ex.getMessage());
      }
      pageTitleField.setText("");
    }
  };
  private Action saveAction = new AbstractAction("Oldallista mentése") {
    public void actionPerformed(ActionEvent e) {
      try {
        fbps.savePageList(fileName);
      } catch (FileNotFoundException ex) {
        showError(ex.getMessage());
      } catch (IOException ex) {
        showError(ex.getMessage());
      }
    }
  };

  private void showError(String message) throws HeadlessException {
    JOptionPane.showMessageDialog(rootPane, message, "Hiba", JOptionPane.ERROR_MESSAGE);
  }
}
