using System;
using System.Collections.Generic;
using System.ServiceProcess;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using COMMON;

namespace SERVER.LIB
{
    public class TestingServices
    {
        public static object lockers = new object();
        /// <summary>
        /// 检测本机指定服务  仅仅 windows 
        /// </summary>
        /// <param name="type">0 只是返回状态  1 启动   2 重启  3 停止</param>
        /// <param name="name">名字</param>
        /// <returns>0 不存在 2 未运行  1 已经运行</returns>
        public static int ISok(string name = "", int type = 0)
        {
            try
            {


                #region RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
                //获取指定服务，若服务状态不是Runing就Start该服务
#pragma warning disable CA1416 // 验证平台兼容性
                var server = ServiceController.GetServices().FirstOrDefault(service => service.ServiceName == name);
                if (server == null)
                {
                    return 0;
                }
                if (type != 0)
                {
                    lock (lockers)
                    {
                        string path = Directory.GetCurrentDirectory() + "\\App_Data\\Server";
                        Directory.CreateDirectory(path);

                        switch (type)
                        {
                            case 1:
                                if (server.Status != ServiceControllerStatus.Running)
                                {
                                    File.WriteAllText(path + "\\Server.xcljj", type.ToString());
                                }
                                break;
                            case 2: 
                                    File.WriteAllText(path + "\\Server.xcljj", type.ToString());  
                                break;
                            case 3:
                                    File.WriteAllText(path + "\\Server.xcljj", type.ToString());
                                break;
                        }
                    }
                }
              
                //开启后再检测一次 
                return type != 0 ? ISok() : (server.Status == ServiceControllerStatus.Running ? 1 : 2);
                #endregion
            }
            catch (Exception ex)
            {
                LogHelp.Error("服务操作失败！" + ex.ToString());
                return 0;
            }
        }
    }
}
