using Applications.FDC;
using Edge.Core.Database;
using Edge.Core.Processor;
using Edge.Core.IndustryStandardInterface.Pump;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Data;
using Microsoft.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;
using Wayne.FDCPOSLibrary;
using Edge.Core.Processor.Dispatcher.Attributes;
using System.Threading;

namespace Applications.PumpInfoToSinoChemPosSqlServerOrMySql
{
    [MetaPartsDescriptor(
              "lang-zh-cn:加油机信息转发代理 SqlServerlang-en-us:Pump Info Agent to SqlServer",
              "lang-zh-cn:用于将加油机的状态和交易数据插入至 SqlServer 目标数据库中" +
              "lang-en-us:Used for proxing pump state and trx to target SqlServer database",
              new[] { "lang-zh-cn:中化lang-en-us:SinoChem" })]
    public class AppSqlServer : AppBase, IAppProcessor
    {
        public string MetaConfigName { get; set; }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="appConfig"></param>
        /// <param name="services"></param>
        [ParamsJsonSchemas("appCtorParamsJsonSchema")]
        public AppSqlServer(AppConfigV1 appConfig, IServiceProvider services) : base(appConfig, services)
        {
        }

        public void Init(IEnumerable<IProcessor> processors)
        {
            base.fdcServerHostApp = processors.OfType<FdcServerHostApp>().First();
            base.HandlePumpStateChangeToDatabase(
                () => new SqlConnection(base.appConfig.DatabaseConnStr),
                () => new SqlCommand());
        }

        public Task<bool> Start()
        {
            return Task.FromResult(
                base.ReCreatePumpLayoutToDatabase(
                    () => new SqlConnection(base.appConfig.DatabaseConnStr),
                    () => new SqlCommand()));
        }

        public Task<bool> Stop()
        {
            return Task.FromResult(true);
        }
    }
}