//////////////////////////////////////////////////////////////////////////
// 修改历史:
//    2014-5-28 Lijia: 客户端效率优化,把DailyMission从class改为struct
//////////////////////////////////////////////////////////////////////////

using UnityEngine;
using System.Collections;
using Games.GlobeDefine;
using Games.Mission;
using Module.Log;

namespace Games.DailyMissionData
{
    public struct DailyMission
    {
        private int m_nMissionID; // 日常任务ID
        public int MissionID
        {
            get { return m_nMissionID; }
            set { m_nMissionID = value; }
        }
        private byte m_yQuality;  // 品质
        public byte Quality
        {
            get { return m_yQuality; }
            set { m_yQuality = value; }
        }

        public void CleanUp()
        {
            m_nMissionID = GlobeVar.INVALID_ID;
            m_yQuality = 0;
        }
    }

    public class DailyMissionData
    {
        public const int MAX_DAILYMISSION_KINDS = 10;   // 最大种类数

        private DailyMission[] m_DailyMissionList;  // 日常任务
        private int m_nDailyMissionDoneCount;   // 每天所做日常任务数
        public int DailyMissionDoneCount
        {
            get { return m_nDailyMissionDoneCount; }
            set { 
                m_nDailyMissionDoneCount = value; 
                //if (ActivityController.Instance())
                //{
                //    //ActivityController.Instance().UpDateDoneCount(m_nDailyMissionDoneCount);
                //}
            }
        }

        public DailyMissionData()
        {
            m_DailyMissionList = new DailyMission[MAX_DAILYMISSION_KINDS];
            m_nDailyMissionDoneCount = 0;
        }

        void CleanUp()
        {
            for (int nIndex = 0; nIndex < MAX_DAILYMISSION_KINDS; nIndex++)
            {
                m_DailyMissionList[nIndex].CleanUp();
            }
            m_nDailyMissionDoneCount = 0;
        }

        public DailyMission GetDailyMissionByKind(int nKind)
        {
            if (nKind >= 0 && nKind < MAX_DAILYMISSION_KINDS)
            {
                return m_DailyMissionList[nKind];
            }

            DailyMission mission = new DailyMission();
            mission.CleanUp();
            return mission;
        }

        public void AskUpdateDailyMission(int nKind)
        {
            if (nKind < 0 || nKind > MAX_DAILYMISSION_KINDS)
            {
                return;
            }
            CG_DAILYMISSION_UPDATE askPacket = (CG_DAILYMISSION_UPDATE)PacketDistributed.CreatePacket(MessageID.PACKET_CG_DAILYMISSION_UPDATE);
            askPacket.SetType(nKind);
            askPacket.SendPacket();
        }

        public void HandlePacket(GC_DAILYMISSION_UPDATE_RET packet)
        {
            DailyMissionDoneCount = packet.Donecount;
            int nKind = packet.Type;
            if (nKind == MAX_DAILYMISSION_KINDS)
            {
                for (int i = 0; i < packet.missionIDCount; i++)
                {
                    DailyMission data = new DailyMission();
                    data.CleanUp();
                    data.MissionID  = packet.GetMissionID(i);
                    data.Quality = (byte)packet.GetQualityType(i);
                    if (i < m_DailyMissionList.Length)
                        m_DailyMissionList[i] = data;
                }

                //if (ActivityController.Instance())
                //{
                //    ActivityController.Instance().UpdateDailyMissionList();
                //}
            }
            else if (nKind > GlobeVar.INVALID_ID && nKind < MAX_DAILYMISSION_KINDS)
            {
                DailyMission data = new DailyMission();
                data.CleanUp();
                data.MissionID = packet.GetMissionID(0);
                data.Quality = (byte)packet.GetQualityType(0);
                m_DailyMissionList[nKind] = data;
                //if (ActivityController.Instance())
                //{
                //    ActivityController.Instance().UpdateMissionItemByKind(nKind);
                //}
            }
        }
    }

}