using DH.RBAC.Model.Sys;
using DH.RBAC.Logic.Base;
using SqlSugar;
using System;
using System.Collections.Generic;
using DH.RBAC.Utility.Other;


namespace DH.RBAC.Logic.Sys
{
    /// <summary>
    /// 系统日志表数据访问
    /// </summary>
    public class SysLogLogic : BaseLogic
    {

        /// <summary>
        /// 根据日志类型获得日志
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="type"></param>
        /// <param name="index"></param>
        /// <param name="keyWord"></param>
        /// <param name="totalCount"></param>
        /// <returns></returns>
        public List<SysLog> GetList(int pageIndex, int pageSize, string type, string index, string keyWord, ref int totalCount)
        {
            using (var db = GetInstance())
            {
                ISugarQueryable<SysLog> query = db.Queryable<SysLog>().Where(it => it.Type == type);
                if (!keyWord.IsNullOrEmpty())
                {
                    query = query.Where(it => it.Message.Contains(keyWord));
                }
                //查询当日
                if (index == "1")
                {
                    DateTime today = DateTime.Today;
                    DateTime startTime = today;
                    DateTime endTime = today.AddDays(1);
                    query = query.Where(it => it.CreateTime >= startTime && it.CreateTime < endTime);
                }
                //近7天
                else if (index == "2")
                {
                    DateTime today = DateTime.Today;
                    DateTime startTime = today.AddDays(-6);
                    DateTime endTime = today.AddDays(1);
                    query = query.Where(it => it.CreateTime >= startTime && it.CreateTime < endTime);
                }
                //近1月
                else if (index == "3")
                {
                    DateTime today = DateTime.Today;
                    DateTime startTime = today.AddDays(-29);
                    DateTime endTime = today.AddDays(1);
                    query = query.Where(it => it.CreateTime >= startTime && it.CreateTime < endTime);
                }
                //近3月
                else if (index == "4")
                {
                    DateTime today = DateTime.Today;
                    DateTime startTime = today.AddDays(-91);
                    DateTime endTime = today.AddDays(1);
                    query = query.Where(it => it.CreateTime >= startTime && it.CreateTime < endTime);
                }
                return query.OrderBy(it => it.Id, OrderByType.Desc).ToPageList(pageIndex, pageSize, ref totalCount);
            }
        }



        /// <summary>
        /// 删除日志
        /// </summary>
        /// <param name="type"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public int Delete(string type, string index)
        {
            using (var db = GetInstance())
            {
                IDeleteable<SysLog> query = db.Deleteable<SysLog>().Where(it => it.Type == type);
                //保留一个月
                if (index == "1")
                {
                    DateTime today = DateTime.Today;
                    DateTime startTime = today;
                    DateTime endTime = today.AddDays(-29);
                    query = query.Where(it => it.CreateTime < endTime);
                    return query.ExecuteCommand();
                }
                //保留7天
                else if (index == "2")
                {
                    DateTime today = DateTime.Today;
                    DateTime startTime = today.AddDays(-6);
                    query = query.Where(it => it.CreateTime < startTime);
                    return query.ExecuteCommand();
                }
                //保留近3个月
                else if (index == "3")
                {
                    DateTime today = DateTime.Today;
                    DateTime startTime = today.AddDays(-92);
                    query = query.Where(it => it.CreateTime < startTime);
                    return query.ExecuteCommand();
                }
                //全部
                else if (index == "4")
                {
                    return query.ExecuteCommand();
                }
                else
                {
                    return 0;
                }

            }
        }
    }
}