using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using TouchSocket.Core;
using TouchSocket.Http;
using TouchSocket.Rpc;
using TouchSocket.Sockets;
using TouchSocket.WebApi.Swagger;

#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* 版权所有 (c) 2024 WenJY 保留所有权利。
* CLR版本：4.0.30319.42000
* 机器名称：T14-GEN3-7895
* 命名空间：SlnMesnac.TouchSocket
* 唯一标识：4e47989b-9d43-426e-b67a-529de3b1b0e8
*
* 创建者：WenJY
* 电子邮箱：
* 创建时间：2024-09-04 10:51:29
* 版本：V1.0.0
* 描述：
*
*--------------------------------------------------------------------
* 修改人：
* 时间：
* 修改说明：
*
* 版本：V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.TouchSocket
{
    public class WebApiServer
    {
        private ApiServer _apiServer;

        public WebApiServer(ApiServer apiServer)
        {
            _apiServer = apiServer;
        }

        public void Init()
        {
            try
            {
                var service = new HttpService();
                service.Setup(new TouchSocketConfig()
                   .SetListenIPHosts(7789)
                   .ConfigureContainer(a =>
                   {
                       a.AddRpcStore(store =>
                       {

                           store.RegisterServer<ApiServer>(_apiServer);//注册服务
                       });

                       a.AddCors(corsOption =>
                       {
                           corsOption.Add("cors", corsBuilder =>
                           {
                               corsBuilder.AllowAnyMethod()
                                   .AllowAnyOrigin();
                           });
                       });

                       a.AddLogger(logger =>
                       {
                           logger.AddConsoleLogger();
                           logger.AddFileLogger();
                       });
                   })
                   .ConfigurePlugins(a =>
                   {
                       a.UseCheckClear();

                       a.Add<AuthenticationPlugin>();

                       a.UseWebApi()
                       .ConfigureConverter(converter =>
                       {
                           converter.AddJsonSerializerFormatter(new Newtonsoft.Json.JsonSerializerSettings() { Formatting = Newtonsoft.Json.Formatting.None });
                       });

                       a.UseSwagger();//使用Swagger页面
                       //.UseLaunchBrowser();

                       a.UseDefaultHttpServicePlugin();
                   }));
                service.Start();

                Console.WriteLine("以下连接用于测试webApi");
                Console.WriteLine($"使用：http://127.0.0.1:7789/swagger/index.html");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            //Console.ReadLine();
        }
    }

    internal class AuthenticationPlugin : PluginBase, IHttpPlugin
    {
        public async Task OnHttpRequest(IHttpSocketClient client, HttpContextEventArgs e)
        {
            await e.InvokeNext();
        }
    }
}
