package Visual_DVM_2021.Passes.All;
import Common.Utils.Utils_;
import _VisualDVM.Constants;
import _VisualDVM.Global;
import _VisualDVM.Utils;
import _VisualDVM.Repository.Server.ServerCode;
import _VisualDVM.Repository.Server.ServerExchangeUnit_2021;
import _VisualDVM.TestingSystem.DVM.DVMPackage.DVMPackage;
import Visual_DVM_2021.Passes.PassCode;
import Common.Passes.Pass;
import Visual_DVM_2021.Passes.Server.TestingSystemPass;
import javafx.util.Pair;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.util.Date;
import java.util.Vector;
public class DownloadDVMPackages extends Pass<Vector<Integer>> {
    Vector<Pair<Integer, Pair<byte[], byte[]>>> packed_packages;
    @Override
    public String getIconPath() {
        return "/icons/DownloadBugReport.png";
    }
    @Override
    public String getButtonText() {
        return "";
    }
    @Override
    protected boolean needsAnimation() {
        return true;
    }
    @Override
    protected boolean canStart(Object... args) throws Exception {
        target = (Vector<Integer>) args[0];
        packed_packages = null;
        TestingSystemPass pass = new TestingSystemPass<Vector<Integer>>() {
            @Override
            protected boolean canStart(Object... args) throws Exception {
                target = (Vector<Integer>) args[0];
                return true;
            }
            @Override
            public String getDescription() {
                return "Получение пакетов";
            }
            @Override
            protected void ServerAction() throws Exception {
                Command(new ServerExchangeUnit_2021(ServerCode.DownloadDVMPackages, "", target));
                packed_packages = (Vector<Pair<Integer, Pair<byte[], byte[]>>>) response.object;
            }
        };
        if (!pass.Do(target)) {
            return false;
        }
        return true;
    }
    @Override
    protected void body() throws Exception {
        ShowMessage1("Распаковка пакета");
        for (Pair<Integer, Pair<byte[], byte[]>> p : packed_packages) {
            DVMPackage dvmPackage = Global.testingServer.db.dvmPackages.get(p.getKey());
            ShowMessage2(String.valueOf(dvmPackage.id));
            File workspace = dvmPackage.getLocalWorkspace();
            Utils.CheckAndCleanDirectory(workspace);
            File results_zip = new File(workspace, "results.zip");
            File results = new File(workspace, "results");
            File loaded = new File(workspace, Constants.LOADED);
            Pair<byte[], byte[]> packed_package = p.getValue();
            //---
            Utils_.bytesToFile(packed_package.getKey(), results_zip);
            Utils_.bytesToFile(packed_package.getValue(), dvmPackage.getJsonFile());
            Global.mainModule.getPass(PassCode.UnzipFolderPass).Do(results_zip.getAbsolutePath(), workspace.getAbsolutePath());
            FileUtils.writeStringToFile(loaded, new Date().toString());
        }
    }
}
