using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using AMESCoreStudio.WebApi.Models.SYS;

namespace AMESCoreStudio.WebApi
{
    /// <summary>
    /// 
    /// </summary>
    public class Helper
    {
        private readonly AMESContext _context;

        /// <summary>
        /// 
        /// </summary>
        /// <param name="context"></param>
        public Helper(AMESContext context)
        {
            _context = context;

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="idName"></param>
        /// <returns></returns>
        public async Task<int> GetIDKey(string idName)
        {
            int key = -1;
            var idkey = await _context.IDKeys.Where(m => m.IDName == idName).FirstOrDefaultAsync();
            if (idkey == null)
            {
                IDKey aID = new IDKey();
                aID.IDName = idName;
                aID.StartNum = 1000;
                aID.LimitNum = Int32.MaxValue;
                aID.CurrentNum = 1000;
                aID.DeltaNum = 1;
                aID.CreateDateTime = DateTime.Now;

                _context.IDKeys.Add(aID);

                try
                {
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    var exs = ex.Message;
                }
            }
            else
            {
                _context.Entry(idkey).State = EntityState.Modified;
                idkey.CurrentNum = idkey.CurrentNum + idkey.DeltaNum;
                idkey.UpdateDateTime = DateTime.Now;

                try
                {
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                }

            }
            idkey = await _context.IDKeys.Where(m => m.IDName == idName).FirstOrDefaultAsync();
            key = Convert.ToInt32(idkey.CurrentNum);

            return key;
        }

        /// <summary>
        /// 抓IDKey最新值不更新
        /// </summary>
        /// <param name="idName"></param>
        /// <returns></returns>
        public async Task<int> GetIDKeyNoPost(string idName)
        {
            int key = -1;
            var idkey = await _context.IDKeys.Where(m => m.IDName == idName).FirstOrDefaultAsync();
            if (idkey == null)
                return key;
            else
                return key = Convert.ToInt32(idkey.CurrentNum);
        }
    }
}