using Sunny.UI;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;

namespace 全自动水压检测仪
{
    /// <summary>
    /// 状态设置弹窗 - 显示温度模式和阀门状态
    /// </summary>
    public partial class StatusSettingsForm : UIForm
    {
        private System.Windows.Forms.Timer _updateTimer;
        private NormalTemperatureMode _parentForm;

        public StatusSettingsForm(NormalTemperatureMode parentForm)
        {
            _parentForm = parentForm;
            
            // 基本的 InitializeComponent 会在 Designer.cs 中调用
            InitializeComponent();
            
            // 设置窗体属性
            this.Text = "状态监控设置";
            this.Width = 900;
            this.Height = 600;
            this.StartPosition = FormStartPosition.CenterParent;
            this.ShowInTaskbar = false;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.FormBorderStyle = FormBorderStyle.FixedDialog;
            
            // 初始化更新定时器
            _updateTimer = new System.Windows.Forms.Timer();
            _updateTimer.Interval = 500; // 每500ms更新一次
            _updateTimer.Tick += UpdateTimer_Tick;
            
            this.FormClosing += StatusSettingsForm_FormClosing;
        }

        private void UpdateTimer_Tick(object sender, EventArgs e)
        {
            // 检查窗体状态
            if (this.IsDisposed || !this.IsHandleCreated)
            {
                return;
            }

            try
            {
                UpdateStatusDisplay();
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"更新状态显示失败: {ex.Message}");
            }
        }

        private void UpdateStatusDisplay()
        {
            if (_parentForm == null || _parentForm.IsDisposed)
                return;

            // 从父窗体获取状态并更新
            _parentForm.UpdateStatusSettingsForm(this);
        }

        // 公共方法供父窗体调用更新状态
        public void UpdateTempModeStatus(UILightState light1State, UILightState light2State, string modeText)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new Action(() => UpdateTempModeStatus(light1State, light2State, modeText)));
                return;
            }

            if (uiLight1_Status != null) uiLight1_Status.State = light1State;
            if (uiLight2_Status != null) uiLight2_Status.State = light2State;
            if (uiLabel11_Status != null) uiLabel11_Status.Text = modeText;
        }

        public void UpdateValveStatus(
            UILightState light3, UILightState light4, UILightState light5,
            UILightState light6, UILightState light7, UILightState light8,
            UILightState light9, UILightState light10, UILightState light11, UILightState light12)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new Action(() => UpdateValveStatus(light3, light4, light5, light6, light7, light8, light9, light10, light11, light12)));
                return;
            }

            if (uiLight3_Status != null) uiLight3_Status.State = light3;
            if (uiLight4_Status != null) uiLight4_Status.State = light4;
            if (uiLight5_Status != null) uiLight5_Status.State = light5;
            if (uiLight6_Status != null) uiLight6_Status.State = light6;
            if (uiLight7_Status != null) uiLight7_Status.State = light7;
            if (uiLight8_Status != null) uiLight8_Status.State = light8;
            if (uiLight9_Status != null) uiLight9_Status.State = light9;
            if (uiLight10_Status != null) uiLight10_Status.State = light10;
            if (uiLight11_Status != null) uiLight11_Status.State = light11;
            if (uiLight12_Status != null) uiLight12_Status.State = light12;
        }

        private void StatusSettingsForm_Load(object sender, EventArgs e)
        {
            // 初始化所有控件
            InitializeControls();
            
            // 启动定时器
            _updateTimer?.Start();
            
            // 初始更新
            UpdateStatusDisplay();
        }

        private void StatusSettingsForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                if (_updateTimer != null)
                {
                    _updateTimer.Stop();
                    _updateTimer.Tick -= UpdateTimer_Tick;
                    _updateTimer.Dispose();
                    _updateTimer = null;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"释放定时器资源失败: {ex.Message}");
            }
        }

        private void uiButton_Close_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void InitializeControls()
        {
            this.mainPanel = new Sunny.UI.UIPanel();
            this.tempModePanel = new Sunny.UI.UIPanel();
            this.valveStatusPanel = new Sunny.UI.UIPanel();
            this.uiLight1_Status = new Sunny.UI.UILight();
            this.uiLight2_Status = new Sunny.UI.UILight();
            this.uiLight3_Status = new Sunny.UI.UILight();
            this.uiLight4_Status = new Sunny.UI.UILight();
            this.uiLight5_Status = new Sunny.UI.UILight();
            this.uiLight6_Status = new Sunny.UI.UILight();
            this.uiLight7_Status = new Sunny.UI.UILight();
            this.uiLight8_Status = new Sunny.UI.UILight();
            this.uiLight9_Status = new Sunny.UI.UILight();
            this.uiLight10_Status = new Sunny.UI.UILight();
            this.uiLight11_Status = new Sunny.UI.UILight();
            this.uiLight12_Status = new Sunny.UI.UILight();
            this.uiLabel11_Status = new Sunny.UI.UILabel();
            this.uiButton_Close = new Sunny.UI.UIButton();

            this.SuspendLayout();
            this.mainPanel.SuspendLayout();

            // mainPanel
            this.mainPanel.Dock = System.Windows.Forms.DockStyle.Fill;
            this.mainPanel.Location = new System.Drawing.Point(0, 35);
            this.mainPanel.Name = "mainPanel";
            this.mainPanel.Size = new System.Drawing.Size(900, 565);
            this.mainPanel.TabIndex = 0;
            this.mainPanel.FillColor = System.Drawing.Color.FromArgb(243, 249, 255);
            this.mainPanel.RectColor = System.Drawing.Color.FromArgb(243, 249, 255);

            // tempModePanel
            this.tempModePanel.Location = new System.Drawing.Point(30, 20);
            this.tempModePanel.Size = new System.Drawing.Size(840, 140);
            this.tempModePanel.FillColor = System.Drawing.Color.White;
            this.tempModePanel.RectColor = System.Drawing.Color.FromArgb(220, 220, 220);
            this.tempModePanel.Radius = 10;
            this.tempModePanel.Name = "tempModePanel";
            this.tempModePanel.TabIndex = 0;

            // 温度模式标题
            var tempModeTitle = new Sunny.UI.UILabel();
            tempModeTitle.Location = new System.Drawing.Point(20, 15);
            tempModeTitle.Size = new System.Drawing.Size(200, 30);
            tempModeTitle.Text = "温度模式状态";
            tempModeTitle.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Bold);
            tempModeTitle.ForeColor = System.Drawing.Color.FromArgb(48, 48, 48);
            this.tempModePanel.Controls.Add(tempModeTitle);

            // 常温模式指示
            var normalTempLabel = new Sunny.UI.UILabel();
            normalTempLabel.Location = new System.Drawing.Point(80, 65);
            normalTempLabel.Size = new System.Drawing.Size(120, 30);
            normalTempLabel.Text = "常温模式";
            normalTempLabel.Font = new System.Drawing.Font("微软雅黑", 12F);
            normalTempLabel.ForeColor = System.Drawing.Color.FromArgb(48, 48, 48);
            normalTempLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.tempModePanel.Controls.Add(normalTempLabel);

            // uiLight1_Status
            this.uiLight1_Status.Location = new System.Drawing.Point(40, 67);
            this.uiLight1_Status.Size = new System.Drawing.Size(30, 30);
            this.uiLight1_Status.OnColor = System.Drawing.Color.FromArgb(80, 160, 255);
            this.uiLight1_Status.OffColor = System.Drawing.Color.FromArgb(200, 200, 200);
            this.uiLight1_Status.Radius = 15;
            this.uiLight1_Status.Name = "uiLight1_Status";
            this.tempModePanel.Controls.Add(this.uiLight1_Status);

            // 高温模式指示
            var highTempLabel = new Sunny.UI.UILabel();
            highTempLabel.Location = new System.Drawing.Point(330, 65);
            highTempLabel.Size = new System.Drawing.Size(120, 30);
            highTempLabel.Text = "高温模式";
            highTempLabel.Font = new System.Drawing.Font("微软雅黑", 12F);
            highTempLabel.ForeColor = System.Drawing.Color.FromArgb(48, 48, 48);
            highTempLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.tempModePanel.Controls.Add(highTempLabel);

            // uiLight2_Status
            this.uiLight2_Status.Location = new System.Drawing.Point(290, 67);
            this.uiLight2_Status.Size = new System.Drawing.Size(30, 30);
            this.uiLight2_Status.OnColor = System.Drawing.Color.FromArgb(255, 80, 80);
            this.uiLight2_Status.OffColor = System.Drawing.Color.FromArgb(200, 200, 200);
            this.uiLight2_Status.Radius = 15;
            this.uiLight2_Status.Name = "uiLight2_Status";
            this.tempModePanel.Controls.Add(this.uiLight2_Status);

            // 当前模式显示
            //var currentModeLabel = new Sunny.UI.UILabel();
            //currentModeLabel.Location = new System.Drawing.Point(520, 65);
            //currentModeLabel.Size = new System.Drawing.Size(120, 30);
            //currentModeLabel.Text = "当前模式：";
            //currentModeLabel.Font = new System.Drawing.Font("微软雅黑", 11F);
            //currentModeLabel.ForeColor = System.Drawing.Color.FromArgb(100, 100, 100);
            //currentModeLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            //this.tempModePanel.Controls.Add(currentModeLabel);

            // uiLabel11_Status
            this.uiLabel11_Status.Location = new System.Drawing.Point(640, 65);
            this.uiLabel11_Status.Size = new System.Drawing.Size(150, 30);
            this.uiLabel11_Status.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Bold);
            this.uiLabel11_Status.ForeColor = System.Drawing.Color.FromArgb(80, 160, 255);
            this.uiLabel11_Status.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.tempModePanel.Controls.Add(this.uiLabel11_Status);

            // valveStatusPanel
            this.valveStatusPanel.Location = new System.Drawing.Point(30, 180);
            this.valveStatusPanel.Size = new System.Drawing.Size(840, 310);
            this.valveStatusPanel.FillColor = System.Drawing.Color.White;
            this.valveStatusPanel.RectColor = System.Drawing.Color.FromArgb(220, 220, 220);
            this.valveStatusPanel.Radius = 10;
            this.valveStatusPanel.Name = "valveStatusPanel";
            this.valveStatusPanel.TabIndex = 1;

            // 阀门状态标题
            var valveStatusTitle = new Sunny.UI.UILabel();
            valveStatusTitle.Location = new System.Drawing.Point(20, 15);
            valveStatusTitle.Size = new System.Drawing.Size(200, 30);
            valveStatusTitle.Text = "阀门状态监控";
            valveStatusTitle.Font = new System.Drawing.Font("微软雅黑", 14F, System.Drawing.FontStyle.Bold);
            valveStatusTitle.ForeColor = System.Drawing.Color.FromArgb(48, 48, 48);
            this.valveStatusPanel.Controls.Add(valveStatusTitle);

            // 阀门状态指示灯布局
            int startX = 40;
            int startY = 65;
            int spacingX = 160;
            int spacingY = 55;

            // 第一行 - 高压出阀
            this.uiLight3_Status.Location = new System.Drawing.Point(startX, startY);
            this.uiLight3_Status.Size = new System.Drawing.Size(28, 28);
            this.uiLight3_Status.OnColor = System.Drawing.Color.FromArgb(0, 190, 0);
            this.uiLight3_Status.OffColor = System.Drawing.Color.FromArgb(200, 200, 200);
            this.uiLight3_Status.Radius = 14;
            this.valveStatusPanel.Controls.Add(this.uiLight3_Status);

            var lbl3 = new Sunny.UI.UILabel();
            lbl3.Location = new System.Drawing.Point(startX + 38, startY);
            lbl3.Size = new System.Drawing.Size(115, 28);
            lbl3.Text = "高压出阀";
            lbl3.Font = new System.Drawing.Font("微软雅黑", 10F);
            lbl3.ForeColor = System.Drawing.Color.FromArgb(60, 60, 60);
            lbl3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.valveStatusPanel.Controls.Add(lbl3);

            // 高压进阀
            this.uiLight4_Status.Location = new System.Drawing.Point(startX + spacingX, startY);
            this.uiLight4_Status.Size = new System.Drawing.Size(28, 28);
            this.uiLight4_Status.OnColor = System.Drawing.Color.FromArgb(0, 190, 0);
            this.uiLight4_Status.OffColor = System.Drawing.Color.FromArgb(200, 200, 200);
            this.uiLight4_Status.Radius = 14;
            this.valveStatusPanel.Controls.Add(this.uiLight4_Status);

            var lbl4 = new Sunny.UI.UILabel();
            lbl4.Location = new System.Drawing.Point(startX + spacingX + 38, startY);
            lbl4.Size = new System.Drawing.Size(115, 28);
            lbl4.Text = "高压进阀";
            lbl4.Font = new System.Drawing.Font("微软雅黑", 10F);
            lbl4.ForeColor = System.Drawing.Color.FromArgb(60, 60, 60);
            lbl4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.valveStatusPanel.Controls.Add(lbl4);

            // 常温抽水阀
            this.uiLight5_Status.Location = new System.Drawing.Point(startX + spacingX * 2, startY);
            this.uiLight5_Status.Size = new System.Drawing.Size(28, 28);
            this.uiLight5_Status.OnColor = System.Drawing.Color.FromArgb(0, 190, 0);
            this.uiLight5_Status.OffColor = System.Drawing.Color.FromArgb(200, 200, 200);
            this.uiLight5_Status.Radius = 14;
            this.valveStatusPanel.Controls.Add(this.uiLight5_Status);

            var lbl5 = new Sunny.UI.UILabel();
            lbl5.Location = new System.Drawing.Point(startX + spacingX * 2 + 38, startY);
            lbl5.Size = new System.Drawing.Size(115, 28);
            lbl5.Text = "常温抽水阀";
            lbl5.Font = new System.Drawing.Font("微软雅黑", 10F);
            lbl5.ForeColor = System.Drawing.Color.FromArgb(60, 60, 60);
            lbl5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.valveStatusPanel.Controls.Add(lbl5);

            // 常温水箱加水阀
            this.uiLight6_Status.Location = new System.Drawing.Point(startX + spacingX * 3, startY);
            this.uiLight6_Status.Size = new System.Drawing.Size(28, 28);
            this.uiLight6_Status.OnColor = System.Drawing.Color.FromArgb(0, 190, 0);
            this.uiLight6_Status.OffColor = System.Drawing.Color.FromArgb(200, 200, 200);
            this.uiLight6_Status.Radius = 14;
            this.valveStatusPanel.Controls.Add(this.uiLight6_Status);

            var lbl6 = new Sunny.UI.UILabel();
            lbl6.Location = new System.Drawing.Point(startX + spacingX * 3 + 38, startY);
            lbl6.Size = new System.Drawing.Size(115, 28);
            lbl6.Text = "常温水箱加水阀";
            lbl6.Font = new System.Drawing.Font("微软雅黑", 10F);
            lbl6.ForeColor = System.Drawing.Color.FromArgb(60, 60, 60);
            lbl6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.valveStatusPanel.Controls.Add(lbl6);

            // 高温抽水阀
            this.uiLight7_Status.Location = new System.Drawing.Point(startX + spacingX * 4, startY);
            this.uiLight7_Status.Size = new System.Drawing.Size(28, 28);
            this.uiLight7_Status.OnColor = System.Drawing.Color.FromArgb(0, 190, 0);
            this.uiLight7_Status.OffColor = System.Drawing.Color.FromArgb(200, 200, 200);
            this.uiLight7_Status.Radius = 14;
            this.valveStatusPanel.Controls.Add(this.uiLight7_Status);

            var lbl7 = new Sunny.UI.UILabel();
            lbl7.Location = new System.Drawing.Point(startX + spacingX * 4 + 38, startY);
            lbl7.Size = new System.Drawing.Size(115, 28);
            lbl7.Text = "高温抽水阀";
            lbl7.Font = new System.Drawing.Font("微软雅黑", 10F);
            lbl7.ForeColor = System.Drawing.Color.FromArgb(60, 60, 60);
            lbl7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.valveStatusPanel.Controls.Add(lbl7);

            // 第二行 - 空气抽气阀
            this.uiLight8_Status.Location = new System.Drawing.Point(startX, startY + spacingY);
            this.uiLight8_Status.Size = new System.Drawing.Size(28, 28);
            this.uiLight8_Status.OnColor = System.Drawing.Color.FromArgb(0, 190, 0);
            this.uiLight8_Status.OffColor = System.Drawing.Color.FromArgb(200, 200, 200);
            this.uiLight8_Status.Radius = 14;
            this.valveStatusPanel.Controls.Add(this.uiLight8_Status);

            var lbl8 = new Sunny.UI.UILabel();
            lbl8.Location = new System.Drawing.Point(startX + 38, startY + spacingY);
            lbl8.Size = new System.Drawing.Size(115, 28);
            lbl8.Text = "空气抽气阀";
            lbl8.Font = new System.Drawing.Font("微软雅黑", 10F);
            lbl8.ForeColor = System.Drawing.Color.FromArgb(60, 60, 60);
            lbl8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.valveStatusPanel.Controls.Add(lbl8);

            // 加热状态
            this.uiLight9_Status.Location = new System.Drawing.Point(startX + spacingX, startY + spacingY);
            this.uiLight9_Status.Size = new System.Drawing.Size(28, 28);
            this.uiLight9_Status.OnColor = System.Drawing.Color.FromArgb(0, 190, 0);
            this.uiLight9_Status.OffColor = System.Drawing.Color.FromArgb(200, 200, 200);
            this.uiLight9_Status.Radius = 14;
            this.valveStatusPanel.Controls.Add(this.uiLight9_Status);

            var lbl9 = new Sunny.UI.UILabel();
            lbl9.Location = new System.Drawing.Point(startX + spacingX + 38, startY + spacingY);
            lbl9.Size = new System.Drawing.Size(115, 28);
            lbl9.Text = "加热状态";
            lbl9.Font = new System.Drawing.Font("微软雅黑", 10F);
            lbl9.ForeColor = System.Drawing.Color.FromArgb(60, 60, 60);
            lbl9.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.valveStatusPanel.Controls.Add(lbl9);

            // 常温回水阀
            this.uiLight10_Status.Location = new System.Drawing.Point(startX + spacingX * 2, startY + spacingY);
            this.uiLight10_Status.Size = new System.Drawing.Size(28, 28);
            this.uiLight10_Status.OnColor = System.Drawing.Color.FromArgb(0, 190, 0);
            this.uiLight10_Status.OffColor = System.Drawing.Color.FromArgb(200, 200, 200);
            this.uiLight10_Status.Radius = 14;
            this.valveStatusPanel.Controls.Add(this.uiLight10_Status);

            var lbl10 = new Sunny.UI.UILabel();
            lbl10.Location = new System.Drawing.Point(startX + spacingX * 2 + 38, startY + spacingY);
            lbl10.Size = new System.Drawing.Size(115, 28);
            lbl10.Text = "常温回水阀";
            lbl10.Font = new System.Drawing.Font("微软雅黑", 10F);
            lbl10.ForeColor = System.Drawing.Color.FromArgb(60, 60, 60);
            lbl10.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.valveStatusPanel.Controls.Add(lbl10);

            // 高温水箱加水阀
            this.uiLight11_Status.Location = new System.Drawing.Point(startX + spacingX * 3, startY + spacingY);
            this.uiLight11_Status.Size = new System.Drawing.Size(28, 28);
            this.uiLight11_Status.OnColor = System.Drawing.Color.FromArgb(0, 190, 0);
            this.uiLight11_Status.OffColor = System.Drawing.Color.FromArgb(200, 200, 200);
            this.uiLight11_Status.Radius = 14;
            this.valveStatusPanel.Controls.Add(this.uiLight11_Status);

            var lbl11 = new Sunny.UI.UILabel();
            lbl11.Location = new System.Drawing.Point(startX + spacingX * 3 + 38, startY + spacingY);
            lbl11.Size = new System.Drawing.Size(115, 28);
            lbl11.Text = "高温水箱加水阀";
            lbl11.Font = new System.Drawing.Font("微软雅黑", 10F);
            lbl11.ForeColor = System.Drawing.Color.FromArgb(60, 60, 60);
            lbl11.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.valveStatusPanel.Controls.Add(lbl11);

            // 高温回水阀
            this.uiLight12_Status.Location = new System.Drawing.Point(startX + spacingX * 4, startY + spacingY);
            this.uiLight12_Status.Size = new System.Drawing.Size(28, 28);
            this.uiLight12_Status.OnColor = System.Drawing.Color.FromArgb(0, 190, 0);
            this.uiLight12_Status.OffColor = System.Drawing.Color.FromArgb(200, 200, 200);
            this.uiLight12_Status.Radius = 14;
            this.valveStatusPanel.Controls.Add(this.uiLight12_Status);

            var lbl12 = new Sunny.UI.UILabel();
            lbl12.Location = new System.Drawing.Point(startX + spacingX * 4 + 38, startY + spacingY);
            lbl12.Size = new System.Drawing.Size(115, 28);
            lbl12.Text = "高温回水阀";
            lbl12.Font = new System.Drawing.Font("微软雅黑", 10F);
            lbl12.ForeColor = System.Drawing.Color.FromArgb(60, 60, 60);
            lbl12.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.valveStatusPanel.Controls.Add(lbl12);

            // 关闭按钮
            this.uiButton_Close.Location = new System.Drawing.Point(375, 510);
            this.uiButton_Close.Size = new System.Drawing.Size(150, 42);
            this.uiButton_Close.Text = "关闭";
            this.uiButton_Close.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Bold);
            this.uiButton_Close.FillColor = System.Drawing.Color.FromArgb(80, 160, 255);
            this.uiButton_Close.FillHoverColor = System.Drawing.Color.FromArgb(100, 180, 255);
            this.uiButton_Close.FillPressColor = System.Drawing.Color.FromArgb(60, 140, 235);
            this.uiButton_Close.RectColor = System.Drawing.Color.FromArgb(80, 160, 255);
            this.uiButton_Close.Radius = 20;
            this.uiButton_Close.Cursor = System.Windows.Forms.Cursors.Hand;
            this.uiButton_Close.Click += new System.EventHandler(this.uiButton_Close_Click);

            // 添加控件到主面板
            this.mainPanel.Controls.Add(this.tempModePanel);
            this.mainPanel.Controls.Add(this.valveStatusPanel);
            this.mainPanel.Controls.Add(this.uiButton_Close);

            this.Controls.Add(this.mainPanel);

            this.mainPanel.ResumeLayout(false);
            this.ResumeLayout(false);
        }
    }
}
