using System;
using System.Collections.Generic;

namespace NPP.SmartSchedue.Api.Contracts.Services.Equipment.Dto;

/// <summary>
/// 设备类型趋势分析输出模型
/// 深度业务场景：支持长期设备投资规划、维护策略制定和产能预测
/// </summary>
public class EquipmentTypeTrendOutput
{
    /// <summary>
    /// 设备类型
    /// </summary>
    public string EquipmentType { get; set; } = string.Empty;

    /// <summary>
    /// 设备类型显示名称
    /// </summary>
    public string EquipmentTypeName { get; set; } = string.Empty;

    /// <summary>
    /// 趋势分析时间段
    /// </summary>
    public DateTime TrendPeriodStart { get; set; }
    public DateTime TrendPeriodEnd { get; set; }

    /// <summary>
    /// 分组周期类型（Day, Week, Month）
    /// </summary>
    public string GroupByPeriod { get; set; } = "Day";

    /// <summary>
    /// 时间序列趋势数据点
    /// 深度业务分析：按时间周期组织的关键指标变化趋势
    /// </summary>
    public List<TrendDataPoint> TrendDataPoints { get; set; } = new();

    /// <summary>
    /// 趋势分析汇总
    /// </summary>
    public TrendAnalysisSummary AnalysisSummary { get; set; } = new();

    /// <summary>
    /// 预测分析结果
    /// 深度业务智能：基于历史数据的未来趋势预测
    /// </summary>
    public PredictionAnalysis PredictionAnalysis { get; set; } = new();

    /// <summary>
    /// 异常检测结果
    /// 业务深度思考：识别异常波动和潜在风险点
    /// </summary>
    public List<AnomalyDetection> AnomalyDetections { get; set; } = new();

    /// <summary>
    /// 季节性分析
    /// 支持识别生产淡旺季对设备使用的影响
    /// </summary>
    public SeasonalityAnalysis SeasonalityAnalysis { get; set; } = new();
}

/// <summary>
/// 趋势数据点
/// 时间序列中的单个数据点，包含关键业务指标
/// </summary>
public class TrendDataPoint
{
    /// <summary>
    /// 数据点时间
    /// </summary>
    public DateTime DataPointTime { get; set; }

    /// <summary>
    /// 时间段标识（如：2024-01-01 或 2024-W01）
    /// </summary>
    public string PeriodLabel { get; set; } = string.Empty;

    /// <summary>
    /// 设备使用率（百分比）
    /// </summary>
    public decimal UtilizationRate { get; set; }

    /// <summary>
    /// 任务完成数量
    /// </summary>
    public int CompletedTaskCount { get; set; }

    /// <summary>
    /// 平均任务持续时间（小时）
    /// </summary>
    public decimal AverageTaskDuration { get; set; }

    /// <summary>
    /// 设备可用率（百分比）
    /// 深度业务指标：考虑维护、故障等因素的实际可用程度
    /// </summary>
    public decimal AvailabilityRate { get; set; }

    /// <summary>
    /// 维护事件次数
    /// </summary>
    public int MaintenanceEventCount { get; set; }

    /// <summary>
    /// 故障事件次数
    /// </summary>
    public int FaultEventCount { get; set; }

    /// <summary>
    /// 工作负荷指数（0-100）
    /// 综合考虑使用率、任务复杂度、时间压力等因素
    /// </summary>
    public decimal WorkloadIndex { get; set; }

    /// <summary>
    /// 效率评分（0-100）
    /// 基于任务完成质量、时间准确性等综合评估
    /// </summary>
    public decimal EfficiencyScore { get; set; }

    /// <summary>
    /// 成本指标
    /// 包含运行成本、维护成本等
    /// </summary>
    public CostMetrics CostMetrics { get; set; } = new();
}

/// <summary>
/// 成本指标
/// 深度财务分析：设备运行的各项成本统计
/// </summary>
public class CostMetrics
{
    /// <summary>
    /// 运行成本（元）
    /// 包含电费、人工、材料等直接成本
    /// </summary>
    public decimal OperatingCost { get; set; }

    /// <summary>
    /// 维护成本（元）
    /// </summary>
    public decimal MaintenanceCost { get; set; }

    /// <summary>
    /// 故障损失成本（元）
    /// 包含停机损失、紧急维修等间接成本
    /// </summary>
    public decimal FailureCost { get; set; }

    /// <summary>
    /// 单位产出成本（元/件）
    /// 深度业务分析：评估设备经济效益的关键指标
    /// </summary>
    public decimal UnitCost { get; set; }
}

/// <summary>
/// 趋势分析汇总
/// 深度统计分析：提供趋势的整体特征和关键洞察
/// </summary>
public class TrendAnalysisSummary
{
    /// <summary>
    /// 整体趋势方向
    /// Increasing: 上升趋势
    /// Decreasing: 下降趋势  
    /// Stable: 稳定趋势
    /// Volatile: 波动趋势
    /// </summary>
    public string OverallTrend { get; set; } = "Stable";

    /// <summary>
    /// 趋势强度系数（-1到1，正值表示上升，负值表示下降）
    /// </summary>
    public decimal TrendStrength { get; set; }

    /// <summary>
    /// 数据波动性系数（0-1，越接近1越不稳定）
    /// </summary>
    public decimal VolatilityCoefficient { get; set; }

    /// <summary>
    /// 最高使用率及其时间点
    /// </summary>
    public PeakDataPoint PeakUsage { get; set; } = new();

    /// <summary>
    /// 最低使用率及其时间点
    /// </summary>
    public PeakDataPoint LowUsage { get; set; } = new();

    /// <summary>
    /// 平均增长率（月环比或周环比）
    /// </summary>
    public decimal AverageGrowthRate { get; set; }

    /// <summary>
    /// 趋势置信度（0-100，基于数据质量和一致性）
    /// </summary>
    public decimal TrendConfidence { get; set; }

    /// <summary>
    /// 关键拐点时间列表
    /// 深度算法识别：使用统计方法识别趋势变化的关键时刻
    /// </summary>
    public List<DateTime> KeyTurningPoints { get; set; } = new();
}

/// <summary>
/// 峰值数据点
/// </summary>
public class PeakDataPoint
{
    /// <summary>
    /// 峰值时间
    /// </summary>
    public DateTime PeakTime { get; set; }

    /// <summary>
    /// 峰值数值
    /// </summary>
    public decimal PeakValue { get; set; }

    /// <summary>
    /// 峰值原因分析
    /// </summary>
    public string CauseAnalysis { get; set; } = string.Empty;
}

/// <summary>
/// 预测分析结果
/// 深度机器学习应用：基于历史数据预测未来趋势
/// </summary>
public class PredictionAnalysis
{
    /// <summary>
    /// 预测周期（天数）
    /// </summary>
    public int PredictionPeriodDays { get; set; }

    /// <summary>
    /// 预测结果数据点
    /// </summary>
    public List<PredictionDataPoint> PredictionDataPoints { get; set; } = new();

    /// <summary>
    /// 预测模型准确度（0-100）
    /// 基于历史预测与实际结果的对比
    /// </summary>
    public decimal ModelAccuracy { get; set; }

    /// <summary>
    /// 置信区间范围（百分比）
    /// </summary>
    public decimal ConfidenceInterval { get; set; } = 95;

    /// <summary>
    /// 风险预警列表
    /// 深度业务智能：基于预测结果识别潜在风险
    /// </summary>
    public List<RiskWarning> RiskWarnings { get; set; } = new();
}

/// <summary>
/// 预测数据点
/// </summary>
public class PredictionDataPoint
{
    /// <summary>
    /// 预测时间
    /// </summary>
    public DateTime PredictedTime { get; set; }

    /// <summary>
    /// 预测使用率
    /// </summary>
    public decimal PredictedUtilizationRate { get; set; }

    /// <summary>
    /// 预测置信度上限
    /// </summary>
    public decimal UpperConfidenceBound { get; set; }

    /// <summary>
    /// 预测置信度下限
    /// </summary>
    public decimal LowerConfidenceBound { get; set; }

    /// <summary>
    /// 影响因子分析
    /// 列出影响该时间点预测结果的关键因素
    /// </summary>
    public List<string> InfluencingFactors { get; set; } = new();
}

/// <summary>
/// 风险预警
/// 深度业务风控：基于预测分析识别经营风险
/// </summary>
public class RiskWarning
{
    /// <summary>
    /// 风险类型
    /// 如：OverCapacity(超负荷), UnderUtilization(利用率不足), MaintenanceRisk(维护风险)等
    /// </summary>
    public string RiskType { get; set; } = string.Empty;

    /// <summary>
    /// 风险等级（Low, Medium, High, Critical）
    /// </summary>
    public string RiskLevel { get; set; } = "Medium";

    /// <summary>
    /// 预计发生时间
    /// </summary>
    public DateTime EstimatedOccurrenceTime { get; set; }

    /// <summary>
    /// 风险描述
    /// </summary>
    public string RiskDescription { get; set; } = string.Empty;

    /// <summary>
    /// 建议应对措施
    /// </summary>
    public List<string> RecommendedActions { get; set; } = new();

    /// <summary>
    /// 风险概率（0-100）
    /// </summary>
    public decimal RiskProbability { get; set; }
}

/// <summary>
/// 异常检测结果
/// 深度统计分析：基于统计学方法识别异常数据点
/// </summary>
public class AnomalyDetection
{
    /// <summary>
    /// 异常发生时间
    /// </summary>
    public DateTime AnomalyTime { get; set; }

    /// <summary>
    /// 异常类型
    /// 如：Spike(尖峰), Drop(骤降), Trend(趋势异常), Seasonal(季节性异常)等
    /// </summary>
    public string AnomalyType { get; set; } = string.Empty;

    /// <summary>
    /// 异常严重程度（1-10）
    /// </summary>
    public int SeverityLevel { get; set; }

    /// <summary>
    /// 异常值
    /// </summary>
    public decimal AnomalyValue { get; set; }

    /// <summary>
    /// 期望值（正常情况下的预期值）
    /// </summary>
    public decimal ExpectedValue { get; set; }

    /// <summary>
    /// 偏差程度（百分比）
    /// </summary>
    public decimal DeviationPercentage { get; set; }

    /// <summary>
    /// 异常原因推测
    /// 深度业务分析：结合业务知识推测异常发生的可能原因
    /// </summary>
    public List<string> PossibleCauses { get; set; } = new();

    /// <summary>
    /// 异常影响评估
    /// </summary>
    public string ImpactAssessment { get; set; } = string.Empty;
}

/// <summary>
/// 季节性分析
/// 深度时间序列分析：识别业务的周期性规律
/// </summary>
public class SeasonalityAnalysis
{
    /// <summary>
    /// 是否存在季节性模式
    /// </summary>
    public bool HasSeasonalPattern { get; set; }

    /// <summary>
    /// 季节性周期长度（天数）
    /// </summary>
    public int SeasonalCycleDays { get; set; }

    /// <summary>
    /// 季节性强度系数（0-1）
    /// </summary>
    public decimal SeasonalityStrength { get; set; }

    /// <summary>
    /// 按季节的使用率分布
    /// </summary>
    public List<SeasonalUsagePattern> SeasonalPatterns { get; set; } = new();

    /// <summary>
    /// 淡旺季分析
    /// 深度业务洞察：识别生产淡旺季规律
    /// </summary>
    public PeakSeasonAnalysis PeakSeasonAnalysis { get; set; } = new();
}

/// <summary>
/// 季节性使用模式
/// </summary>
public class SeasonalUsagePattern
{
    /// <summary>
    /// 季节名称（春、夏、秋、冬 或 Q1、Q2、Q3、Q4）
    /// </summary>
    public string SeasonName { get; set; } = string.Empty;

    /// <summary>
    /// 季节开始时间
    /// </summary>
    public DateTime SeasonStart { get; set; }

    /// <summary>
    /// 季节结束时间
    /// </summary>
    public DateTime SeasonEnd { get; set; }

    /// <summary>
    /// 该季节的平均使用率
    /// </summary>
    public decimal AverageUtilizationRate { get; set; }

    /// <summary>
    /// 相对年均值的变化百分比
    /// </summary>
    public decimal VariationFromYearlyAverage { get; set; }

    /// <summary>
    /// 该季节的特征描述
    /// </summary>
    public string SeasonCharacteristics { get; set; } = string.Empty;
}

/// <summary>
/// 淡旺季分析
/// 深度业务策略支持：为生产计划和资源配置提供决策依据
/// </summary>
public class PeakSeasonAnalysis
{
    /// <summary>
    /// 旺季时间段
    /// </summary>
    public List<SeasonPeriod> PeakSeasons { get; set; } = new();

    /// <summary>
    /// 淡季时间段
    /// </summary>
    public List<SeasonPeriod> LowSeasons { get; set; } = new();

    /// <summary>
    /// 旺季与淡季的使用率差异百分比
    /// </summary>
    public decimal PeakLowDifference { get; set; }

    /// <summary>
    /// 季节性规划建议
    /// 深度业务智慧：基于季节性分析提供运营建议
    /// </summary>
    public List<string> SeasonalPlanningRecommendations { get; set; } = new();
}

/// <summary>
/// 季节期间
/// </summary>
public class SeasonPeriod
{
    /// <summary>
    /// 季节类型（Peak 或 Low）
    /// </summary>
    public string SeasonType { get; set; } = string.Empty;

    /// <summary>
    /// 开始时间
    /// </summary>
    public DateTime StartTime { get; set; }

    /// <summary>
    /// 结束时间
    /// </summary>
    public DateTime EndTime { get; set; }

    /// <summary>
    /// 该期间的平均使用率
    /// </summary>
    public decimal AverageUtilizationRate { get; set; }

    /// <summary>
    /// 持续天数
    /// </summary>
    public int DurationDays { get; set; }
}