using PowerEasy.WebFuture.DataMigrations.Foundation.Enum;

namespace PowerEasy.WebFuture.DataMigrations.Foundation.MigrationProgramme
{
    /// <summary>
    /// 迁移方案接口。
    /// </summary>
    public interface IMigrationProgramme
    {
        /// <summary>
        /// 迁移方案标识符。自定义，用于唯一标识迁移方案。
        /// </summary>
        string MigrationProgrammeIdentifier { get; set; }

        /// <summary>
        /// 迁移方案名称。自定义，用于在界面上面显示。
        /// </summary>
        string MigrationProgrammeName { get; set; }

        /// <summary>
        /// 源数据库类型。
        /// </summary>
        DatabaseType SourceDataBaseType { get; set; }

        /// <summary>
        /// 源数据库服务器地址。
        /// </summary>
        string SourceDataBaseServer { get; set; }

        /// <summary>
        /// 源数据库服务器端口。
        /// </summary>
        string SourceDataBasePort { get; set; }

        /// <summary>
        /// 源数据库名称。
        /// </summary>
        string SourceDataBaseName { get; set; }

        /// <summary>
        /// 源数据库用户名。
        /// </summary>
        string SourceDataBaseUserName { get; set; }

        /// <summary>
        /// 源数据库密码。
        /// </summary>
        string SourceDataBasePassword { get; set; }

        /// <summary>
        /// 目标据库类型。
        /// </summary>
        DatabaseType TargetDataBaseType { get; set; }

        /// <summary>
        /// 目标数据库服务器地址。
        /// </summary>
        string TargetDataBaseServer { get; set; }

        /// <summary>
        /// 目标数据库服务器端口。
        /// </summary>
        string TargetDataBasePort { get; set; }

        /// <summary>
        /// 目标数据库名称。
        /// </summary>
        string TargetDataBaseName { get; set; }

        /// <summary>
        /// 目标数据库用户名。
        /// </summary>
        string TargetDataBaseUserName { get; set; }

        /// <summary>
        /// 目标数据库密码。
        /// </summary>
        string TargetDataBasePassword { get; set; }

        /// <summary>
        /// 迁移操作集合。
        /// </summary>
        List<MigrationAction> MigrationActions { get; set; }

        /// <summary>
        /// 迁移项目集合。
        /// </summary>
        List<IMigrationItem> MigrationItems { get; set; }

        /// <summary>
        /// 开始执行迁移方案。
        /// </summary>
        /// <param name="isCheckedIncremental">是否勾选增量迁移。</param>
        /// <returns>返回执行迁移是否成功。</returns>
        bool StartMigration(bool isCheckedIncremental);
    }
}
