package application.actions;

import java.awt.event.ActionEvent;
import java.io.File;

import javax.swing.AbstractAction;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;

import application.ApplicationWindow;
import application.editor.Editor;

public class SaveAsAction extends AbstractSystemAction {
	/**
	 * 
	 */
	private static final long serialVersionUID = -2599502783032684084L;

	private String lastDir = null;

	public SaveAsAction(ApplicationWindow frame) {
		super("Save As...", frame);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		Editor editor = frame.getEditor();
		if (editor != null) {
			String wd = (lastDir  != null) ? lastDir : System.getProperty("user.dir");

			JFileChooser fc = new JFileChooser(wd);
			FileFilter model = new FileNameExtensionFilter("model","model");
			FileFilter dtram = new FileNameExtensionFilter("dtram", "dtram");
			
			// Adds file filter for supported file format
			FileFilter defaultFilter = new FileFilter() {
				public boolean accept(File file) {
					String lcase = file.getName().toLowerCase();
					 return lcase.endsWith(".model");
				}

				@Override
				public String getDescription() {
					return null;
				}
			};
			
			fc.addChoosableFileFilter(defaultFilter);
			fc.addChoosableFileFilter(model);
			fc.addChoosableFileFilter(dtram);
			int rc = fc.showDialog(null, "Save Model File");
			
			// choose a file extension from a dialog.
			if (rc == JFileChooser.APPROVE_OPTION) {

				// if extension filter is filled, then attaching extension by choosing filter.
				// but if it's not filled, then using default extension name. 				
				String extension = "";				
				if(fc.getFileFilter() instanceof FileNameExtensionFilter) {
					FileNameExtensionFilter selectedFilter = (FileNameExtensionFilter)fc.getFileFilter();
					extension = "." + selectedFilter.getExtensions()[0].toString();
				}
				
				lastDir = fc.getSelectedFile().getParent();
				
				String fileName = fc.getSelectedFile().getAbsolutePath() + extension;
				
				// checking file duplicates
				if(! (fc.getSelectedFile().exists()))  editor.setCurFilePath(fileName);	
				
				// overwriting file
				editor.save();
				frame.setTitle(ApplicationWindow.title + " - " + fc.getSelectedFile().getAbsolutePath());
			}
		}
	}

}
