package mambo;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.ParseException;

/**
 *
 * @author  pons
 */

public class HdbQueryDlg extends JDialog {

  static final long DAY   = 86400000;
  static final long HOUR  = 3600000;

  static final long[] dateOffset = { 4*HOUR , 8*HOUR , 1*DAY , 3*DAY , 7*DAY, 30*DAY };

  //Locals
  private JTextField d1Text;
  private JTextField d2Text;
  private JComboBox  dateCombo;

  private JButton goBtn;
  private JButton cancelBtn;

  boolean ret_value = false;

  // Construction without predefined values
  public HdbQueryDlg(String title,Frame parent) {

    super(parent, title ,true);
    getContentPane().setLayout(null);

    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) {
        ret_value = false;
        hide();
        dispose();
      }
    });

    d1Text = new JTextField();
    d1Text.setEditable(true);
    d1Text.setBorder(BorderFactory.createTitledBorder("Start date"));
    d1Text.setBackground(getBackground());
    getContentPane().add(d1Text);

    d2Text = new JTextField();
    d2Text.setEditable(true);
    d2Text.setBorder(BorderFactory.createTitledBorder("Stop date"));
    d2Text.setBackground(getBackground());
    getContentPane().add(d2Text);

    dateCombo = new JComboBox();
    dateCombo.removeAllItems();
    dateCombo.addItem("Last 4 hours");
    dateCombo.addItem("Last 8 hours");
    dateCombo.addItem("Last day");
    dateCombo.addItem("Last 3 days");
    dateCombo.addItem("Last week");
    dateCombo.addItem("Last month");
    getContentPane().add(dateCombo);
    dateCombo.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent evt) {
         updateDate();
       }
    });
    dateCombo.setSelectedIndex(0);


    goBtn = new JButton();
    goBtn.setText("Go");
    getContentPane().add(goBtn);

    cancelBtn = new JButton();
    cancelBtn.setText("Cancel");
    getContentPane().add(cancelBtn);

    d1Text.setBounds(5, 10, 390, 40);
    d2Text.setBounds(5, 50, 390, 40);

    dateCombo.setBounds(5,95,390,25);

    goBtn.setBounds(5, 245, 150, 30);
    cancelBtn.setBounds(315, 245, 80, 30);

    cancelBtn.addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent evt) {
        ret_value = false;
        hide();
        dispose();
      }
    });

    goBtn.addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent evt) {
        // Check if server name has a correct format
        ret_value = true;
        hide();
        dispose();
      }
    });

    Rectangle r = parent.getBounds();
    int x = r.x + (r.width - 410) / 2;
    int y = r.y + (r.height - 310) / 2;
    setBounds(x, y, 410, 310);
  }

  public QueryInfo showDlg() {

    long start,stop;

    show();

    if( ret_value ) {

      String d1 = d1Text.getText();
      try {
        start = DateUtil.dateToTime(d1);
      } catch (ParseException e) {
        showError("Failed to parse start date\n"+e.getMessage());
        return null;
      }

      String d2 = d2Text.getText();
      try {
        stop = DateUtil.dateToTime(d2);
      } catch (ParseException e) {
        showError("Failed to parse stop date\n"+e.getMessage());
        return null;
      }

      return new QueryInfo(start,stop);

    }

    return null;
  }

  private void updateDate() {

    long m = System.currentTimeMillis();
    d2Text.setText(DateUtil.timeToDate(m));
    m -= dateOffset[dateCombo.getSelectedIndex()];
    d1Text.setText(DateUtil.timeToDate(m));

  }

  public void showError(String msg) {
    JOptionPane.showMessageDialog(this, msg, "Mambo error", JOptionPane.ERROR_MESSAGE);
  }

}
