using CP.Business;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using CP.Common;
using System.Text;
using CP.Model;

namespace CP.Web
{
    /// <summary>
    /// 开奖号型码类:开机号、试机号、开奖号
    /// </summary>
    public enum OpenCodeType
    {
        /// <summary>
        /// 默认
        /// </summary>
        Normal,
        /// <summary>
        /// 开机号
        /// </summary>
        KaiJiHao,
        /// <summary>
        /// 试机号
        /// </summary>
        ShiJiHao,
        /// <summary>
        /// 开奖号
        /// </summary>
        KaiJiangHao
    }

    public class ZtUtil
    {
        public static string GetHotContent(int id)
        {
            var ztPage = ZtPageBll.GetById(id);
            return ztPage.Content;
        }

        public static string GetColumn(string lotteryCode) {
            var datas = ZtColumnBll.GetList(lotteryCode);
            var sp = new StringBuilder();
            foreach (var item in datas)
            {
                sp.Append("<li>");
                sp.AppendFormat("<div class=\"columnImg\"><img src=\"{0}\" /></div>", item.Logo);
                sp.Append("<div class=\"synopsis\">");
                sp.AppendFormat("<h1><a href=\"/zt/{0}/\" target=\"_blank\">{1}</a></h1>", item.RewriteUrl, item.Name);
                sp.AppendFormat("<p>{0}</p>", Utils.GetSubString(Utils.RemoveHtml(item.About), 56, ""));
                sp.Append("</div>");
                sp.Append("<div class=\"keyWord\">");
                sp.AppendFormat("<p>{0}</p>", item.Words);
                sp.Append("</div>");
                sp.Append("</li>");
            }
            return sp.ToString();
        }

        public static string GetHotColumn(string lotteryCode, int topSize)
        {
            var datas = ZtColumnBll.GetList(lotteryCode);
            if (datas == null || datas.Count ==0)
                return "";
            datas = datas.OrderByDescending(item => item.Status).ToList();
            datas = datas.Take(topSize).ToList();
            var sp = new StringBuilder();
            foreach (var item in datas)
            {
                sp.AppendFormat("<li class=\"spcaile {0}\"><a href=\"/zt/{1}/\" target=\"_blank\">{2}</a></li>",
                    GetColumnTypeCss(item.TypeName), item.RewriteUrl, item.Name);
            }
            return sp.ToString();
        }


        /// <summary>
        /// 专栏类型CSS样式
        /// </summary>
        /// <param name="typeName"></param>
        /// <returns></returns>
        public static string GetColumnTypeCss(string typeName)
        {
            if (string.IsNullOrEmpty(typeName))
                return "";

            switch (typeName)
            {
                case "tool":
                    return "tools";
                case "tuku":
                    return "tuku";
                case "article":
                    return "news";
                case "rule":
                    return "plays";
                case "opencode":
                    return "lotte";
            }
            return "";
        }

        /// <summary>
        /// 获取专题类型对应的名称
        /// </summary>
        /// <param name="columnType"></param>
        /// <returns></returns>
        public static string GetColumnTypeName(string columnType)
        {
            if (string.IsNullOrEmpty(columnType))
                return "";

            switch (columnType)
            {
                case "tool":
                    return "工具类";
                case "tuku":
                    return "图库图谜";
                case "article":
                    return "资讯预测";
                case "rule":
                    return "玩法技巧";
                case "opencode":
                    return "开奖类";
            }
            return "";
        }

        /// <summary>
        /// 自定义列表翻页方法
        /// </summary>
        /// <param name="page">页码</param>
        /// <param name="pagesize">每页Size</param>
        /// <param name="recordCount">总条数</param>
        /// <param name="fomartUrl">fomartURL链接格式</param>
        /// <param name="showIndexCount">显示页码个数</param>
        /// <returns></returns>
        public static string ListPage(int pageIndex, int pageSize, int recordCount, string fomartUrl, int showIndexCount)
        {
            if (0 >= recordCount)
                return "";
            var sp = new StringBuilder();
            int pageCount = recordCount / pageSize;
            if (0 != recordCount % pageSize)
                pageCount++;
            if (recordCount < pageSize)
                pageCount = 1;

            int left = showIndexCount / 2;
            int right = showIndexCount - left;

            int startIndex = pageIndex - left;
            int endIndex = pageIndex + right - 1;

            if (0 >= startIndex)
            {
                startIndex = 1;
                endIndex = showIndexCount;
            }
            if (endIndex > pageCount)
                endIndex = pageCount;

            if (pageIndex > 1)
            {
                sp.AppendFormat("<a href=\"{0}\">第一页</a>", string.Format(fomartUrl, 1));
                sp.AppendFormat("<a href=\"{0}\">上一页</a>", string.Format(fomartUrl, pageIndex > 1 ? pageIndex - 1 : 1));
            }
            for (int i = startIndex; i <= endIndex; i++)
            {
                if (i == pageIndex)
                { sp.AppendFormat("<span>{0}</span>", i); }
                else
                { sp.AppendFormat("<a href=\"{0}\">{1}</a>", string.Format(fomartUrl, i), i); }
            }
            if (pageIndex < pageCount)
            {
                sp.AppendFormat("<a href=\"{0}\">下一页</a>", string.Format(fomartUrl, pageIndex + 1));
                sp.AppendFormat("<a href=\"{0}\">最后一页</a>", string.Format(fomartUrl, pageCount));
            }
            return sp.ToString();
        }

        #region 专题相关
        /// <summary>
        /// 专栏获取彩种相关开奖信息及开奖号码
        /// </summary>
        /// <param name="lotteryCode">彩种编号</param>
        /// <returns></returns>
        public static string[] GetColumnOpenData(string lotteryCode)
        {
            string openDay = "", css = "";
            var openInfo = new StringBuilder();
            switch (lotteryCode)
            {
                case "ssq":
                    css = "ssq";
                    openDay = "每周二、四、日<span>21:20</span>";
                    //var ssq = CB.Data.Caches.GetFCSSQInfo(0, OpenCodeType.KaiJiangHao);
                    var ssq = FcssqData.GetFcssqInfoByQi(0);
                    if (null != ssq)
                    {
                        openInfo.Append("<li class=\"belowL\">");
                        openInfo.Append("<ul class=\"up\" id=\"navigation\">");
                        openInfo.Append("<li class=\"caiz\">双色球</li>");
                        openInfo.AppendFormat("<li class=\"qihao\">第<span>{0}</span>期开奖结果</li>", ssq.qi.ToString());
                        openInfo.Append("<li class=\"ballbox\">");
                        openInfo.AppendFormat("<span class=\"ball red\">{0}</span><span class=\"ball red\">{1}</span><span class=\"ball red\">{2}</span><span class=\"ball red\">{3}</span>",
                            ssq.n1.ToString("00"), ssq.n2.ToString("00"), ssq.n3.ToString("00"), ssq.n4.ToString("00"));
                        openInfo.AppendFormat("<span class=\"ball red\">{0}</span><span class=\"ball red\">{1}</span><span class=\"ball blue\">{2}</span>",
                            ssq.n5.ToString("00"), ssq.n6.ToString("00"), ssq.n7.ToString("00"));
                        openInfo.Append("</li>");
                        openInfo.Append("</ul>");
                        openInfo.Append("</li>");
                        openInfo.AppendFormat("<li class=\"belowL\">开奖时间:{0}  兑奖截止:{1}</li>",
                            ssq.date.ToString("yyyy年MM月dd日"), ssq.date.AddDays(60).ToString("yyyy年MM月dd日"));
                    }
                    break;
                case "3d":
                    css = "fc3d";
                    openDay = "每日<span>20:30</span>";
                    //var fc3d = CB.Data.Caches.GetFC3DInfo(0, OpenCodeType.KaiJiangHao);
                    var fc3d = FcsdData.GetFcsdInfoByQi(0);
                    if (null != fc3d)
                    {
                        openInfo.Append("<li class=\"belowL\">");
                        openInfo.Append("<ul class=\"up\" id=\"navigation\">");
                        openInfo.Append("<li class=\"caiz\">福彩3D</li>");
                        openInfo.AppendFormat("<li class=\"qihao\">第<span>{0}</span>期开奖结果</li>", fc3d.qi.ToString());
                        openInfo.Append("<li class=\"ballbox\">");
                        openInfo.AppendFormat("<span class=\"ball red\">{0}</span><span class=\"ball red\">{1}</span><span class=\"ball red\">{2}</span>",
                            fc3d.n1.ToString(), fc3d.n2.ToString(), fc3d.n3.ToString());
                        openInfo.Append("</li>");
                        openInfo.Append("</ul>");
                        openInfo.Append("</li>");
                        openInfo.AppendFormat("<li class=\"belowL\">开奖时间:{0}  兑奖截止:{1}</li>",
                            fc3d.date.ToString("yyyy年MM月dd日"), fc3d.date.AddDays(60).ToString("yyyy年MM月dd日"));
                    }
                    break;
                case "dlt":
                    css = "dlt";
                    openDay = "每周一、三、六<span>20:30</span>";
                    //var dlt = CB.Data.Caches.GetTCDLTInfo(0, OpenCodeType.KaiJiangHao);
                    var dlt = TcdltData.GetTcdltInfoByQi(0);
                    if (null != dlt)
                    {
                        openInfo.Append("<li class=\"belowL\">");
                        openInfo.Append("<ul class=\"up\" id=\"navigation\">");
                        openInfo.Append("<li class=\"caiz\">大乐透</li>");
                        openInfo.AppendFormat("<li class=\"qihao\">第<span>{0}</span>期开奖结果</li>", dlt.qi.ToString());
                        openInfo.Append("<li class=\"ballbox\">");
                        openInfo.AppendFormat("<span class=\"ball red\">{0}</span><span class=\"ball red\">{1}</span><span class=\"ball red\">{2}</span><span class=\"ball red\">{3}</span>",
                            dlt.n1.ToString("00"), dlt.n2.ToString("00"), dlt.n3.ToString("00"), dlt.n4.ToString("00"));
                        openInfo.AppendFormat("<span class=\"ball red\">{0}</span><span class=\"ball blue\">{1}</span><span class=\"ball blue\">{2}</span>",
                            dlt.n5.ToString("00"), dlt.n6.ToString("00"), dlt.n7.ToString("00"));
                        openInfo.Append("</li>");
                        openInfo.Append("</ul>");
                        openInfo.Append("</li>");
                        openInfo.AppendFormat("<li class=\"belowL\">开奖时间:{0}  兑奖截止:{1}</li>",
                            dlt.date.ToString("yyyy年MM月dd日"), dlt.date.AddDays(60).ToString("yyyy年MM月dd日"));
                    }
                    break;
                case "p3":
                    css = "p3";
                    openDay = "每日<span>20:30</span>";
                    //var p3 = CB.Data.Caches.GetTCP3Info(0, OpenCodeType.KaiJiangHao);
                    var p3 = Tcp3Data.GetTcp3InfoByQi(0);
                    if (null != p3)
                    {
                        openInfo.Append("<li class=\"belowL\">");
                        openInfo.Append("<ul class=\"up\" id=\"navigation\">");
                        openInfo.Append("<li class=\"caiz\">排列三</li>");
                        openInfo.AppendFormat("<li class=\"qihao\">第<span>{0}</span>期开奖结果</li>", p3.qi.ToString());
                        openInfo.Append("<li class=\"ballbox\">");
                        openInfo.AppendFormat("<span class=\"ball red\">{0}</span><span class=\"ball red\">{1}</span><span class=\"ball red\">{2}</span>",
                            p3.n1.ToString(), p3.n2.ToString(), p3.n3.ToString());
                        openInfo.Append("</li>");
                        openInfo.Append("</ul>");
                        openInfo.Append("</li>");
                        openInfo.AppendFormat("<li class=\"belowL\">开奖时间:{0}  兑奖截止:{1}</li>",
                            p3.date.ToString("yyyy年MM月dd日"), p3.date.AddDays(60).ToString("yyyy年MM月dd日"));
                    }
                    break;
            }
            return new string[] { css, openDay, openInfo.ToString() };
        }

        /// <summary>
        /// 图库图片获取上一期号 限制P3/3D
        /// </summary>
        /// <param name="qi"></param>
        /// <param name="lottery"></param>
        /// <returns></returns>
        public static int GetUpTerm(int qi, string lottery)
        {
            int year = qi / 1000;
            int minQi = year * 1000 + 001;
            int lastQi = qi - 1;
            if (minQi > lastQi)
            {
                year = year - 1;
                int endQi = year * 1000 + 153;
                if (lottery.ToLower() == "3d" || lottery.ToLower() == "p3")
                {
                    endQi = endQi + 205;
                    if (2014 == year)//2014年少一期
                    { endQi = endQi - 1; }
                }
                if (0 == (year % 4))
                { endQi = endQi + 1; }
                lastQi = endQi;
            }
            return lastQi;
        }

        /// <summary>
        /// 获取下一期号
        /// </summary>
        /// <param name="qi"></param>
        /// <param name="lottery"></param>
        /// <returns></returns>
        public static int GetNextTerm(int qi, string lottery)
        {
            int year = qi / 1000;
            int endQi = year * 1000 + 153;
            if (lottery == "3d" || lottery == "p3")
            {
                endQi = endQi + 205;
                if (2014 == year)//2014年少一期
                { endQi = endQi - 1; }
            }
            if (0 == (year % 4))
            { endQi = endQi + 1; }
            if (qi < endQi)
                return qi + 1;
            return (year + 1) * 1000 + 1;
        }

        /// <summary>
        /// WAP端专题页子导航
        /// </summary>
        /// <param name="lottery">专题所属彩种</param>
        /// <param name="localColumnId">当前专题ID</param>
        /// <returns></returns>
        public static string GetColumnNavForWap(string lottery)
        {
            var list = ZtColumnBll.GetList(lottery);
            if (null == list || 0 >= list.Count)
                return "";

            var sp = new StringBuilder();
            sp.Append("<ul>");
            if (3 < list.Count)
            {
                for (int i = 0; i < 3; i++)
                {
                    sp.AppendFormat("<li><a href=\"/zt/{0}/\">{1}</a></li>",
                        list[i].RewriteUrl, list[i].Name);
                }
                sp.Append("</ul>");
                sp.Append("<ul class=\"enlarge\" id=\"enlarge\" style=\"display:none;\">");
                for (int i = 3; i < list.Count; i++)
                {
                    sp.AppendFormat("<li><a href=\"/zt/{0}/\">{1}</a></li>",
                        list[i].RewriteUrl, list[i].Name);
                }
                sp.Append("</ul>");
                sp.Append("<div class=\"unfold\" onclick=\"unfold()\" id=\"unfold\"></div>");
            }
            else
            {
                foreach (var item in list)
                {
                    sp.AppendFormat("<li><a href=\"/zt/{0}/\">{1}</a></li>",
                        item.RewriteUrl, item.Name);
                }
                sp.Append("</ul>");
            }
            return sp.ToString();
        }

        #endregion
    }

    /// <summary>
    /// 专栏配置
    /// </summary>
    public class ColumnConfigInfo
    {
        /// <summary>
        /// 图库图片URL总路径
        /// </summary>
        public string TukuFileUrl { get; set; }
        /// <summary>
        /// 图库WEB服务地址
        /// </summary>
        public string TukuWebServiceUrl { get; set; }
        /// <summary>
        /// 图库域名
        /// </summary>
        public string TukuDomain { get; set; }
    }
}