package plugin.cmvc.ui;

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataConstants;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.diff.DiffContent;
import com.intellij.openapi.diff.DiffManager;
import com.intellij.openapi.diff.FileContent;
import com.intellij.openapi.diff.SimpleContent;
import com.intellij.openapi.diff.SimpleDiffRequest;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import plugin.cmvc.ExtractFile;
import plugin.cmvc.Props;

import java.io.File;
import java.io.IOException;

/**
 * Created by IntelliJ IDEA.
 * User: Anand
 * Date: Mar 23, 2006
 * Time: 4:43:26 PM
 * To change this template use File | Settings | File Templates.
 */
public class CompareToRepositoryAction extends AnAction {

    public static final String TMP_FILE_NAME = "idea_cmvc";
    private File myTmpFile;
    private VirtualFile myFile;

    public void actionPerformed(AnActionEvent e) {
        try {
            String fileName = Util.getFileName(e);
            DataContext dataContext = e.getDataContext();
            myFile = (VirtualFile) dataContext.getData(DataConstants.VIRTUAL_FILE);
            Project myProject = (Project)dataContext.getData(DataConstants.PROJECT);

            if (myFile != null) {
                System.out.println("Copying current file to tmp directory");
                String extension = myFile.getExtension();
                String s = "." + extension;

/*
                File tmpFile = new File(TMP_FILE_NAME, s);
                tmpFile.deleteOnExit();
                File tmpDir = tmpFile.getParentFile();
                myTmpFile = new File(tmpDir, myFile.getName());
*/

                myTmpFile = new File(Props.getTmpDir(), fileName);
                myTmpFile.deleteOnExit();

                //get the file from repository.
                System.out.println("Getting file from repository");
                ExtractFile extractFile = new ExtractFile(fileName, Props.getTmpDir());
                extractFile.go();
                System.out.println("Wrote the file " + fileName + " in dir " + Props.getTmpDir());

                try {
                  SimpleDiffRequest diffData = new SimpleDiffRequest(myProject,myFile.getPresentableUrl());
                  diffData.setContentTitles("From repository", "Local file");
                  DiffContent currentContent = FileContent.fromFile(myProject, myFile);
                  DiffContent vssContent = SimpleContent.fromIoFile(myTmpFile,
                          myFile.getCharset().name(), currentContent.getContentType());
                  diffData.setContents(vssContent, currentContent);
                  DiffManager.getInstance().getDiffTool().show(diffData);
                }
                catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        } catch (Exception e1) {
            e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
    }
}
