using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HttpClientStudy.Core.Utilities
{
    /// <summary>
    /// dotnet命令行工具类
    /// </summary>
    public static class DotnetCommondUtility
    {
        /// <summary>
        /// 执行dotnet命令
        /// </summary>
        /// <param name="command">命令</param>
        /// <param name="arguments">命令参数</param>
        /// <param name="waitForExit">是否等待退出</param>
        /// <returns>命令行输出文本</returns>
        public static string ExecuteCommand(string command, string arguments = "", bool waitForExit=false)
        {
            string output = "";

            try
            {
                ProcessStartInfo startInfo = new ProcessStartInfo()
                {
                    FileName = "dotnet",
                    Arguments = $"{command} {arguments}",
                    RedirectStandardOutput = true,
                    StandardOutputEncoding = Encoding.UTF8,
                    RedirectStandardError = true,
                    StandardErrorEncoding = Encoding.UTF8,
                    RedirectStandardInput = true,
                    StandardInputEncoding = Encoding.UTF8,
                    UseShellExecute = false,
                    CreateNoWindow = false,
                };


                Process process = new Process()
                { 
                    StartInfo = startInfo,
                };

                process.Start();

                output = process.StandardOutput.ReadToEnd();

                if (waitForExit)
                {
                    process.WaitForExit();
                }
            }
            catch (Exception ex)
            {
                output = $"An error occurred: {ex.Message}";
            }

            return output;
        }
    }
}