package net.northking.cctp.daemon.service;

import net.northking.cctp.daemon.entity.DaemonEngineInfo;
import net.northking.cctp.daemon.entity.ScriptEngineVersion;
import net.northking.cctp.se.dto.ScriptEngineInfo;

import java.io.File;

public interface DaemonService
{

  /**
   * 引擎更新完成
   */
  void upgradeCompleted();

  /**
   * 更新引擎最新的版本号
   *
   * @param lastVersion 引擎最新的版本号
   */
  void updateLastVersion(ScriptEngineVersion lastVersion);

  /**
   * 获取更新文件的根目录
   *
   * @return 更新文件的根目录
   */
  String getPatchDirectory();

  /**
   * 更新脚本引擎信息
   *
   * @param scriptEngineInfo 脚本引擎信息
   */
  void updateEngineInfo(ScriptEngineInfo scriptEngineInfo);

  /**
   * 获取下载地址
   *
   * @return 下载地址
   */
  String getDownloadUrl();

  /**
   * 完成下载任务
   *
   * @param file 下载的文件
   */
  void downloadCompleted(File file);

  /**
   * 获取待解压缩文件
   *
   * @return 待解压缩文件
   */
  String getUnZipFile();

  /**
   * 完成解压缩任务
   *
   * @param unZipDir 压缩后的文件目录
   */
  void unZipCompleted(String unZipDir);

  /**
   * 是否获取最新版本
   *
   * @return 是否获取最新版本
   */
  boolean preparedLoadLastVersion();

  /**
   * 是否下载补丁
   *
   * @return 是否下载补丁
   */
  boolean preparedDownload();

  /**
   * 是否解压缩补丁包
   *
   * @return 是否解压缩补丁包
   */
  boolean preparedUnZip();

  /**
   * 是否开始更新
   *
   * @return 是否开始更新
   */
  boolean preparedUpgradeEngine();

  /**
   * 是否更新完成等待重启
   * @return
   */
  boolean preparedWaitEngine();
  /**
   * 重启完成更新状态
   */
  void restartEngineFinish();

  DaemonEngineInfo getInfo();

  void updateInitVersion(ScriptEngineVersion initVersion);

  boolean startCheck();

  void updateToDownload();
}
