package _VisualDVM.Passes.All;
import Common.Utils.Utils_;
import Common.Visual.UI;
import Common.Visual.Windows.Dialog.Dialog;
import _VisualDVM.Global;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.Passes.Project.CurrentProjectPass;
import _VisualDVM.Utils;
import _VisualDVM.Visual.Windows.CopyProjectFields;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.nio.file.Paths;
public class CopyProject extends CurrentProjectPass {
    protected File dstFile = null;
    protected boolean migrateData = false;
    @Override
    public boolean hasStats() {
        return true;
    }
    @Override
    protected boolean canStart(Object... args) throws Exception {
        if (super.canStart(args)) {
            Dialog<Object, CopyProjectFields> dialog = new Dialog<Object, CopyProjectFields>(CopyProjectFields.class) {
                @Override
                public int getDefaultHeight() {
                    return 230;
                }
                @Override
                public void Init(Object... params) {
                    fields.tfParent.setText(Global.visualiser.getWorkspace().getAbsolutePath());
                }
                @Override
                public void validateFields() {
                    Utils.validateFileShortNewName(fields.tfName.getText(), Log);
                    if (!fields.tfParent.getText().isEmpty()) {
                        if (Utils_.ContainsCyrillic(fields.tfParent.getText()))
                            Log.Writeln_("Путь к целевой папке не может содержать кириллицу!");
                    } else Log.Writeln_("Путь к целевой папке не может быть пустым!");
                    if (Log.isEmpty()) {
                        dstFile = Paths.get(fields.tfParent.getText(), fields.tfName.getText()).toFile();
                        if (dstFile.exists())
                            Log.Writeln_("Файл " + dstFile.getAbsolutePath() + " уже существует!");
                    }
                }
            };
            if (dialog.ShowDialog(getDescription())) {
                migrateData = dialog.fields.MigrateData.isSelected();
                return true;
            }
        }
        return false;
    }
    @Override
    public String getIconPath() {
        return "/icons/Transformations/CopyProject.png";
    }
    @Override
    protected void body() throws Exception {
        FileUtils.forceMkdir(dstFile);
        target.Clone(dstFile, migrateData);
    }
    @Override
    protected void performDone() throws Exception {
        if (UI.Question("копия текущего проекта успешно создана по адресу\n" + dstFile.getAbsolutePath() + "\nОткрыть её")) {
            Global.mainModule.getPass(PassCode.CloseCurrentProject).Do();
            Global.mainModule.getPass(PassCode.OpenCurrentProject).Do(dstFile);
        }
    }
}
