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);
        }

        /// <summary>
        /// 獲取用戶編號
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public async Task<string> GetUserNo(int? userId)
        {
            string user_no = null;
            if (userId == null)
            {
                return user_no;
            }
            var user = await _context.UserInfoes.Where(m => m.UserID == userId.Value).FirstOrDefaultAsync();
            if (user == null)
                return "";
            else
                return user_no = user.UserNo;
        }

        /// <summary>
        /// 獲取用戶編號
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public async Task<string> GetUserName(int? userId)
        {
            string user_name = null;
            if (userId == null)
            {
                return user_name;
            }

            var user = await _context.UserInfoes.Where(m => m.UserID == userId.Value).FirstOrDefaultAsync();
            if (user == null)
                return "";
            else
                return user_name = user.UserName;
        }
    }
}