package SesameGUI;

import java.io.*;
import javax.swing.*;
import javax.swing.JButton;
import java.awt.*;
import java.util.EventListener;

public class GuiWindow1 extends javax.swing.JDialog
	{
	public GuiWindow1(java.awt.Frame parent, boolean modal)
		{
		super(parent, modal);

		initComponents();
		}

  public static void displayFile(String name , String outName , Windows windows , ProcessingParameters processingParameters)
		{
    String                  pp = "";

    pp = "Main Processing Parameters\n\n";
    pp += "freq_spacing:" + processingParameters.f_freqSpacing;
    if (processingParameters.f_freqSpacing.equals("fft_red")) 
      pp += ":" + processingParameters.f_arg1 + ":" + processingParameters.f_arg2;
    if (processingParameters.f_freqSpacing.equals("linear") || processingParameters.f_freqSpacing.equals("log")) 
      pp += ":" + processingParameters.f_arg1 + ":" + processingParameters.f_arg2 + ":" + processingParameters.f_arg3;

    pp += "\noffset_rem:" + processingParameters.or_offsetRemoval;
    if (processingParameters.or_offsetRemoval.equals("high-pass")) 
      pp += ":" + processingParameters.or_arg1 + "\n";
    else
      pp += "\n";

    pp += "taper:" + processingParameters.tp_tappering;
    if (processingParameters.tp_tappering.equals("cos")) 
      pp += ":" + processingParameters.tp_arg1 + "\n";
    else
      pp += "\n";

    pp += "instrument_resp:" + processingParameters.instrumentResponse + "\n";

    pp += "smooth:" + processingParameters.sm_smoothing;
    if (processingParameters.sm_smoothing.equals("none")) 
      pp += "\n";
    if (processingParameters.sm_smoothing.equals("linear") || processingParameters.sm_smoothing.equals("log")) 
      pp += ":" + processingParameters.sm_arg1 + ":" + processingParameters.sm_arg2 + "\n";
    if (processingParameters.sm_smoothing.equals("konno-ohmachi")) 
      pp += ":" + processingParameters.sm_arg1 + "\n";

    pp += "merge_type:" + processingParameters.merging + "\n";

    pp += "single_component:" + processingParameters.outSingleComp + "\n";

    pp += "average_type:" + processingParameters.average + "\n";

    pp += "single_win_out:" + processingParameters.outSingleWindows + "\n";
    
		GuiWindow1 dlg1         = GuiWindow1.createDlg (outName , pp);
    dlg1.jLabel4.setText(name);
		GuiWindow2 dlg2         = GuiWindow2.createDlg (dlg1.spectra , dlg1.spectraPlus , dlg1.spectraMinus , dlg1.spectraNS , dlg1.spectraNSPlus , dlg1.spectraNSMinus , dlg1.spectraEW , dlg1.spectraEWPlus , dlg1.spectraEWMinus);
    dlg2.setMTitle(name);

    dlg2.wave_ns.setF0 (dlg1.F0 , dlg1.F0_m_sd , dlg1.F0_p_sd);
    dlg2.wave_ew.setF0 (dlg1.F0 , dlg1.F0_m_sd , dlg1.F0_p_sd);

    dlg2.wave_ns.setWindowLen (dlg1.window_len);
    dlg2.wave_ew.setWindowLen (dlg1.window_len);

    dlg1.setNext(dlg2);

		dlg2.setPrev(dlg1);

    if (windows.getNumberWindows() > 0)
      {
      GuiWindow3 dlg3         = GuiWindow3.createDlg (name , outName , windows , dlg1.unitsSp);
      
      dlg2.setNext(dlg3);

  		dlg3.setPrev(dlg2);
      }
    else
      dlg2.setNext(null);

		dlg1.show();
		}

	private void initComponents()
		{ //GEN-BEGIN:initComponents
		getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

		nextButton = new javax.swing.JButton();

		nextButton.setText(">");
		nextButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
		nextButton.addActionListener(
		    new java.awt.event.ActionListener()
			    {
			    public void actionPerformed(java.awt.event.ActionEvent evt)
				    {
				    nextButtonActionPerformed(evt);
				    }
			    });

		getContentPane().add(nextButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(861, 10, 30, 30));

    graphButton = new javax.swing.JButton();

		graphButton.setText("*");
    graphButton.setBackground(Color.red);
		graphButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
		graphButton.addActionListener(
		    new java.awt.event.ActionListener()
			    {
			    public void actionPerformed(java.awt.event.ActionEvent evt)
				    {
				    graphButtonActionPerformed(evt);
				    }
			    });

		getContentPane().add(graphButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(650, 28, 10, 10));

		wave = new SpectrumView();
		title = new ModiLabel();
		jPanel2 = new javax.swing.JPanel();
		jLabel1 = new javax.swing.JLabel();
		jLabel2 = new javax.swing.JLabel();
		jLabel3 = new javax.swing.JLabel();
		jLabel4 = new javax.swing.JLabel();
    jLabel5 = new JTextArea();

		setTitle("Output (1/3)");
		addWindowListener(
		    new java.awt.event.WindowAdapter()
			    {
			    public void windowClosing(java.awt.event.WindowEvent evt)
				    {
				    closeDialog(evt);
				    }
			    });

		wave.setBackground(java.awt.Color.white);
		wave.setBorder(new javax.swing.border.LineBorder(java.awt.Color.black));
    wave.setMargins(true);
		getContentPane().add(wave, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 40, 650, 685));

		title.setFont(new java.awt.Font("Dialog", 1, 16));
		title.setForeground(new java.awt.Color(0, 0, 204));
		title.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		title.setText("Spectral ratio (H/V)");
		getContentPane().add(title, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 10, 500, -1));

		jPanel2.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

		jPanel2.setBackground(java.awt.Color.white);
		jPanel2.setBorder(new javax.swing.border.LineBorder(java.awt.Color.black));
		jLabel1.setText("Y Scale");
		
		jLabel2.setText("X Scale");
		
		jLabel3.setText("HV +- Scale");
		
		jLabel4.setText("Title");
		jPanel2.add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 20, -1, -1));

		jLabel5.setText("Main Processing Parameters");
		jPanel2.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 60, -1, 185));
		getContentPane().add(jPanel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(680, 40, 320, 250));

    setSize(1024,768);
		//pack();
		} //GEN-END:initComponents

	/** Closes the dialog */
	public void closeDialog(java.awt.event.WindowEvent evt)
		{ //GEN-FIRST:event_closeDialog
		System.out.println("closing");
		setVisible(false);
    
//		getNext().dispose();
		dispose();
		
		} //GEN-LAST:event_closeDialog

	private void nextButtonActionPerformed(java.awt.event.ActionEvent evt)
		{
		setVisible(false);
		getNext().setVisible(true);
		}

  private void graphButtonActionPerformed(java.awt.event.ActionEvent evt)
		{
    GraphPropertiesDlg    dlg = new GraphPropertiesDlg (this);

    dlg.type = 1;
    dlg.s1 = spectra;
    dlg.s2 = spectraPlus;
    dlg.s3 = spectraMinus;

    dlg.sv = wave;
    dlg.load();
  
    dlg.show();
		}

  public static GuiWindow1 createDlg(String fileName , String pp)
		{
		GuiWindow1 dlg = new GuiWindow1(new javax.swing.JFrame(), true);

    try
			{
      String      s;
      
			dlg.spectra      = new Spectrum();
      dlg.spectra.setName("H/V");
			dlg.spectraPlus  = new Spectrum();
      dlg.spectraPlus.setName("H/V * Sd");
			dlg.spectraMinus = new Spectrum();
      dlg.spectraMinus.setName("H/V / Sd");

 			dlg.spectraNS      = new Spectrum();
      dlg.spectraNS.setName("NS/V");
			dlg.spectraNSPlus  = new Spectrum();
      dlg.spectraNSPlus.setName("NS/V * Sd");
			dlg.spectraNSMinus = new Spectrum();
      dlg.spectraNSMinus.setName("NS/V / Sd");

      dlg.spectraEW      = new Spectrum();
      dlg.spectraEW.setName("EW/V");
			dlg.spectraEWPlus  = new Spectrum();
      dlg.spectraEWPlus.setName("EW/V * Sd");
			dlg.spectraEWMinus = new Spectrum();
      dlg.spectraEWMinus.setName("EW/V / Sd");

      s = fileName;
      
			FileReader fr = new FileReader(s);

			SpectrumMPSdFileReader fileReader = new SpectrumMPSdFileReader(fr, dlg.spectra, dlg.spectraNS, dlg.spectraEW , null , null , null);

			if (!fileReader.read(dlg.spectraPlus , dlg.spectraMinus , dlg.spectraNSPlus , dlg.spectraNSMinus , dlg.spectraEWPlus , dlg.spectraEWMinus))
				JOptionPane.showMessageDialog(null, "Failed to read file");
			else
				{
				LogarithmicHorizontalScale scaleX;
				AbsoluteVerticalScale scaleY;
				scaleX = new LogarithmicHorizontalScale(dlg.wave);
        
				scaleY = new AbsoluteVerticalScale(dlg.wave);
				scaleX.setLabel("Frequency (Hz)");
				scaleY.setLabel("Spectral ratio");

        if (fileReader.getF0 () != 0.0)
          {
          dlg.wave.setF0 (fileReader.getF0 () , fileReader.getF0_m_sd () , fileReader.getF0_p_sd ());

          dlg.F0 = fileReader.getF0 ();
          dlg.F0_m_sd = fileReader.getF0_m_sd ();
          dlg.F0_p_sd = fileReader.getF0_p_sd ();
          }

      if (fileReader.getWindowLen () != 0.0)
          {
          dlg.wave.setWindowLen (fileReader.getWindowLen ());
          dlg.window_len = fileReader.getWindowLen ();
          }

				dlg.setScale(scaleX, scaleY);
				dlg.spectra.getSpectraVisualProperties().setLineColor(Color.black);
				dlg.spectraPlus.getSpectraVisualProperties().setLineColor(Color.red);
				dlg.spectraMinus.getSpectraVisualProperties().setLineColor(Color.blue);
				dlg.setSpectrum(dlg.spectra);
				dlg.setSpectrumPlus(dlg.spectraPlus);
				dlg.setSpectrumMinus(dlg.spectraMinus);

        dlg.unitsSp = fileReader.getUnitsSp ();
				}
			}
		catch (FileNotFoundException e)
			{
			}

    dlg.jLabel5.setText(pp);

		return dlg;
		}

	public JDialog getNext() { return next; }

	public void setNext(JDialog next) { this.next = next; }

	public Spectrum getSpectrum()
		{
		return spectrum;
		}

	public void setSpectrum(Spectrum spectrum)
		{
		this.spectrum = spectrum;
		wave.addSpectrum(this.spectrum);
		}

	public Spectrum getSpectrumPlus()
		{
		return spectrumPlus;
		}

	public void setSpectrumPlus(Spectrum spectrumPlus)
		{
		this.spectrumPlus = spectrumPlus;
		wave.addSpectrum(this.spectrumPlus);
		}

	public Spectrum getSpectrumMinus()
		{
		return spectrumMinus;
		}

	public void setSpectrumMinus(Spectrum spectrumMinus)
		{
		this.spectrumMinus = spectrumMinus;
		wave.addSpectrum(this.spectrumMinus);
		}

	private void setScale(Scale scaleX, Scale scaleY)
		{
		wave.setScaleX(scaleX);
		wave.setScaleY(scaleY);
		wave.setParentPanel(null);
		}

	// Variables declaration - do not modify//GEN-BEGIN:variables
	private SpectrumView wave;
	private ModiLabel title;
	private javax.swing.JPanel jPanel2;
	private javax.swing.JLabel jLabel1;
	private javax.swing.JLabel jLabel2;
	private javax.swing.JLabel jLabel3;
	private javax.swing.JLabel jLabel4;
	private JTextArea jLabel5;
	private JDialog next;
	private Spectrum spectrum;
	private Spectrum spectrumPlus;
	private Spectrum spectrumMinus;
	private javax.swing.JButton nextButton;
  private javax.swing.JButton graphButton;
	// End of variables declaration//GEN-END:variables

  private   Spectrum spectra;
  private   Spectrum spectraPlus;
  private   Spectrum spectraMinus;

  private   Spectrum spectraNS;
  private   Spectrum spectraNSPlus;
  private   Spectrum spectraNSMinus;

  private   Spectrum spectraEW;
  private   Spectrum spectraEWPlus;
  private   Spectrum spectraEWMinus;

  private   double F0;
  private   double F0_p_sd;
  private   double F0_m_sd;

  private   double window_len;

  private   String unitsSp;
	}

