using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using static CollaborativePlatformMain.CADStartUtil.AcadDirs;

namespace CollaborativePlatformMain.CADStartUtil
{
    /// <summary>
    /// 
    /// <para>文件名(File Name):     StartCADUtil.cs</para>
    /// 
    /// <para>描述(Description):     启动CAD并打开图纸</para>
    /// 
    /// <para>数据表(Tables):        nothing</para>
    /// 
    /// <para>作者(Author):          Ou Rui Song</para>
    /// 
    /// <para>日期(Create Date):     2024年5月7日11:31:34</para>
    /// 
    /// 修改记录(Revision History):
    ///     R1:
    ///         修改作者:
    ///         修改日期:
    ///         修改理由:
    /// 
    /// </summary>
    public class StartCADUtil
    {


        public static void StartCADMath(bool isFloor = true, OpenDrawPathData openDrawPathData = null)
        {
            try
            {
                //获取本机cad路径
                AcadDirs regedits = new AcadDirs();

                //未安装CAD
                if (regedits.Dirs.Count == 0)
                {
                    MessageBox.Show(DateTime.Now + "当前电脑未安装 AutoCAD ");
                    return;
                }

                //未安装2019版CAD
                List<AcadProductKey> cadPathpks = regedits.Dirs.Where(x => x.ProductName.Equals("AutoCAD 2019 - 简体中文 (Simplified Chinese)")).ToList();
                if (cadPathpks.Count == 0)
                {
                    Console.WriteLine(DateTime.Now + "当前电脑未安装 AutoCAD 2019 - 简体中文 (Simplified Chinese)");
                    Console.ReadLine();
                    return;
                }

                var pros = Process.GetProcessesByName("acad");
                if (pros.Length != 0)
                {
                    //已打开cad,写入一个文件，让cad监听文件
                    if (isFloor)
                    {
                        TwoOpenCADConfigUtil twoOpenCADConfigUtil = new TwoOpenCADConfigUtil();
                        twoOpenCADConfigUtil.Save(new TwoOpenData(true), @"D:\DFBIM\CMTwoOpenFloor.config");
                    }
                    else
                    {
                        OpenDrawConfigUtil openDrawConfigUtil = new OpenDrawConfigUtil();
                        openDrawConfigUtil.Save(openDrawPathData, @"D:\DFBIM\OpenDrawPathData.config");
                    }
                }
                else
                {
                    string location = cadPathpks[0].Location;

                    // 创建一个脚本文件并写入要执行的命令
                    string scriptFile = location + "\\autocad_script.scr";
                    if (isFloor) File.WriteAllText(scriptFile, "CMOPENCADFLOOR\n");
                    else
                    {
                        OpenDrawConfigUtil openDrawConfigUtil = new OpenDrawConfigUtil();
                        openDrawConfigUtil.Save(openDrawPathData, @"D:\DFBIM\OpenDrawPathData.config");
                        File.WriteAllText(scriptFile, "CMOPENCADDRAW\n");
                    }
                    // 启动AutoCAD进程并运行脚本文件
                    ProcessStartInfo startInfo = new ProcessStartInfo
                    {
                        FileName = location + "\\acad.exe",
                        Arguments = $"/b \"{scriptFile}\"",
                        UseShellExecute = false,
                        RedirectStandardError = true,
                        RedirectStandardInput = true,
                        RedirectStandardOutput = true,
                        CreateNoWindow = true
                    };

                    //创建新的线程
                    using (Process autocadProcess = new Process())
                    {
                        autocadProcess.StartInfo = startInfo;
                        autocadProcess.Start();

                        // 等待AutoCAD进程完成
                        autocadProcess.WaitForInputIdle();

                        // 删除脚本文件
                        //File.Delete(scriptFile);
                    }
                }
            }
            catch (Exception)
            {
                return;
            }
        }


        /// <summary>
        /// 关闭进程
        /// </summary>
        private static void KillProcess(int currentProcessId = -1)
        {
            if (currentProcessId == -1) currentProcessId = Process.GetCurrentProcess().Id;

            Process cadProcess = Process.GetProcessById(currentProcessId);

            if (!cadProcess.HasExited)
            {
                cadProcess.Kill();
                //log.Info($"成功关闭CAD应用程序 (PID: {cadProcess.Id})");

            }
            else
            {
                //log.Info($"CAD应用程序 (PID: {cadProcess.Id}) 已经退出。");
            }

            //kill infoer
            Process[] processes = Process.GetProcessesByName("WSCommCntr4");
            if (processes.Length != 0)
            {
                processes[0].Kill();
                //log.Info("kill infoer");
            }
        }

    }
}
