using MainShell.AlgorithmCalib.Common;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SemiPoint = SemiconductorVisionAlgorithm.SemiParams.Point;

namespace MainShell.AlgorithmCalib.Model
{
    public static class FusionCalibModuleNames
    {
        public const string DieFusion = "Die融合标定";
        public const string PadFusion = "Pad融合标定";
    }

    /// <summary>
    /// 融合标定模块参数
    /// Die和Pad共用，通过 IsWaferCalib 区分
    /// </summary>
    public class FusionCalibModuleItem
    {
        // ===== 通用属性 =====
        public string ModuleName { get; set; }
        public bool IsIndependent { get; set; }

        [JsonIgnore]
        public IAlgorithmCalibrationPostProcessor PostProcessor { get; set; }

        // ===== 融合标定参数 =====
        public int Index { get; set; }
        public string Camera_ID { get; set; }
        public bool IsWaferCalib { get; set; }         // true=Die(WS轴), false=Pad(PHS轴)

        // 位置参数
        public double MoveAxisPos { get; set; }        // 移动轴位置（Die=X1, Pad=Y1）
        public double ApproachXPos { get; set; }       // 逼近X（Die=X2, Pad=X1）
        public double ApproachYPos { get; set; }       // 逼近Y（Die=Y1, Pad=Y2）
        public double CameraAxisPos { get; set; }      // 相机轴起始位置

        // 标定范围参数
        public double StartX { get; set; }             // 起始X
        public double StartY { get; set; }             // 起始Y
        public double Step { get; set; }               // 步进距离
        public int Count { get; set; }                 // 组数

        // 网格参数
        public double CalibStep { get; set; }          // 网格步长
        public int CalibCount { get; set; }            // 网格行列数

        // 模板路径
        public string ModelPath { get; set; } = "";

        // ===== 验证参数 =====
        public double WaferStartVerifyX { get; set; }  // 验证起点X（Die=X2, Pad=X1）
        public double WaferStartVerifyY { get; set; }  // 验证起点Y（Die=Y1, Pad=Y2）
        public double WaferVerityStep { get; set; }    // 验证步进
        public int WaferVerityCountX { get; set; }     // 验证X方向数量
        public int WaferVerityCountY { get; set; }     // 验证Y方向数量

        // ===== 对位验证参数 =====
        // Die对位：飞拍die坐标
        public double DieRealX { get; set; }           // die实际X（real坐标）
        public double DieRealY { get; set; }           // die实际Y（real坐标）
        public double DieRulerX { get; set; }          // die轴位置X（ruler坐标）
        public double DieRulerY { get; set; }          // die轴位置Y（ruler坐标）

        // Pad对位：飞拍pad坐标
        public double PadRealX { get; set; }           // pad实际X（real坐标）
        public double PadRealY { get; set; }           // pad实际Y（real坐标）
        public double PadRulerX { get; set; }          // pad轴位置X（ruler坐标）
        public double PadRulerY { get; set; }          // pad轴位置Y（ruler坐标）

        // 对位结果
        public double AlignResultX { get; set; }       // 对齐后X1偏移量
        public double AlignResultY { get; set; }       // 对齐后Y1偏移量
        public double AlignResultX2 { get; set; }      // X2补偿量

        // ===== 运行时结果（不序列化） =====
        [JsonIgnore]
        public List<SemiPoint> RulerPoints { get; set; } = new List<SemiPoint>();
        [JsonIgnore]
        public List<SemiPoint> RealPoints { get; set; } = new List<SemiPoint>();
        // Die网格飞拍数据
        [JsonIgnore]
        public List<Tuple<int, int, SemiPoint>> DieGridPoints { get; set; } = new List<Tuple<int, int, SemiPoint>>();
    }
}