using GCGame;
using GCGame.Table;
using UnityEngine;

public class PropID
{
    //以下为固定,战斗相关的放这里
    public enum PropertyID
        //enum FixPropId
    {
        PROPFIX_MIN = 0,
        MAXHP = PROPFIX_MIN, //血上限 0
        MAXMP = 1, //蓝上限
        MAXXP = 2, //战意上限
        PYSATTACK = 3, //物理攻击
        MAGATTACK = 4, //魔法攻击
        PYSDEF = 5, //物理防御
        MAGDEF = 6, //魔法防御
        HIT = 7, //命中
        DODGE = 8, //闪避
        CRITICAL = 9, //暴击
        DECRITICAL = 10, //爆抗
        STRIKE = 11, //穿透
        DUCTICAL = 12, //韧性
        CRITIADD = 13, //暴击伤害加成
        CRITIMIS = 14, //暴击伤害减免
        INGDEF = 15, //无视防御
        REDUCEDAM = 16, //伤害减免
        MOVESPEED = 17, //移动速度
        ATTACKSPEED = 18, //攻击速度
        CUREAMOUNT = 19, //治疗量

        CONSTITU = 20, //体质
        MORFIB = 21, //精力
        STRENGTH = 22, //力量
        INTELLENG = 23, //智力
        AGILE = 24, //敏捷

        DIZZYENHANCE = 25, //眩晕增强
        DIZZYEDEF = 26, //眩晕抗性
        SILENTENHANCE = 27, //沉默增强
        SILENTDEF = 28, //沉默抗性
        IMMOBENHANCE = 29, //定身
        IMMOBDEF = 30, //抗定身
        REPELENHANCE = 31, //击退增强
        REPELDEF = 32, //抗击退
        POLYMORPHENHANCE = 33, //变羊增强
        POLYMORPHDEF = 34, //抗变羊
        HMENHANCE = 35, //昏迷增强
        HMDEF = 36, //抗昏迷
        SMENHANCE = 37, //失明增强
        SMDEF = 38, //抗失明
        SHENHANCE = 39, //石化增强
        SHDEF = 40, //抗石化
        HPRECOV = 41, //回血
        MPRECOV = 42, //回蓝
        ATTACKRATEIGNORE = 43, //攻击时概率忽略防御,数值读其他表
        ATTACKRATEFIXDAM = 44, //攻击时概率造成固定伤害
        ATTACKRATERECOVHP = 45, //攻击时概率回复血量
        ATTACKRATERECOVMP = 46, //攻击时概率回蓝

        DGDEF, //电抗
        DGIGNDEF, //忽视电抗
        HUOGDEF, //火抗
        HUOGIGNDEF, //忽视火炕
        DUGDEF, //毒抗
        DUGIGNDEF, //忽视毒抗
        BGDEF, //冰抗
        BGIGNDEF, //忽视冰抗
        FGDEF, //风抗
        FGIGNDEF, //忽视风抗
        GGDEF, //光抗
        GGIGNDEF, //忽视光抗
        HUANGDEF, // 抗幻弓
        HUANGIFNDEF, //忽视幻抗
        ALLGDEF, //所有抗属性加
        ALLGINGDEF, //所有抗属性忽视增加
        DAMGRATEADDMONSTER, //对普通怪物伤害加成比率
        DAMGRATEADDPET, //对宠物伤害加成比率
        DAMGRATEADDUSER, //对玩家伤害加成比率
        DAMGRATEADDBOSS = 67, //对boss伤害加成比率
        SKILLLVLADD, //技能等级加成 子id 0表示所有技能,非零表示对应技能

        VOCDAMAGERATE, //职业伤害加成百分比,玩家对固定职业额外造成百分比伤害 子id表示职业
        VOCDAMAGEREDUECRATE, //职业伤害减免百分比,玩家受到固定职业伤害百分比减免 子id表示职业

        ATTACKALL = 71, //增加所有攻击力
        DEFALL, //所有防御增加
        ATTACKALLRATE, //所有攻击增加百分比率
        DEFALLRATE, //所有防御增加
        MAXHPRATE, //增加最大血百分比
        MAXMPRATE, // 最大魔增加百分比
        MAXXPRATE, //战意百分比
        PYSATTACKRATE, //物理攻击增加百分比
        MAGATTACKRATE, //魔法攻击增加百分比
        PYSDEFRATE, //物理防御增加百分比
        MAGDEFRATE, //魔法防御增加百分比
        HITRATE, //命中率增加百分比
        DODGERATE, //闪避增加百分比
        CRITICALRATE, //暴击增加百分比
        DECRITICALRATE, //抗爆增加百分比
        STRIKERATE, //穿透百分比
        DUCTICALRATE, //韧性把粉笔
        CRITIADDRATE, //暴击伤害加成百分比
        CRITIMISRATE, //暴击伤害减免百分比
        INGDEFRATE, //无视防御百分比
        REDUCEDAMRATE, //减免伤害百分比
        MOVESPEEDRATE, // 移动速度百分比
        ATTACKSPEEDRATE, //攻击速度百分比

        CUREAMOUNTRATE, //治疗量增加百分比率
        CONSTITURATE, //体质增加百分比率
        MORFIBRATE, //精力增加百分比率
        STRENGTHRATE, //力量增加百分比率
        INTELLENGRATE, //智力增加百分比率
        AGILERATE, //敏捷增加分比

        //
        HLDEF, //混乱抗
        HLIGNDEF, //忽视混乱抗
        HLENHANCE, //混乱增强

        DGATTACK, //点攻
        HUOATTACK, //火攻
        DUGATTACK, //毒攻
        BGATTACK, //冰攻
        FGATTACK, //风攻
        GGATTACK, //光攻
        HUANGATTACK, //幻攻

        PROPFIX_MAX,
        //};


        ////enum ObjPropId
        //{
        PROPOBJ_Min = 256,
        STEALTHLEV = PROPOBJ_Min, //隐身级别
        PROPOBJ_Max,
        //};

        ////enum CharactorPropId
        //{
        PROPCHAR_MIN = 288,
        CURHP = PROPCHAR_MIN, //HP
        CURMP, //MP
        CURXP, //XP
        LEVEL, //等级

        STATE, //状态位                        // 1-死亡,2-战斗
        PROP_COUNTTRY, //势力国家

        FACEDIR, //朝向
        NAME, //名字

        MAXHPADD, //当前最大血量加成
        MAXHPCAPADD, //最大血量加成
        MAXHPCAP, //最大血量
        CHARACTORPROP_MAX,
        //};

        ////enum UserPropId
        //{
        PROPUSER_MIN = 384,
        PROFESSION = PROPUSER_MIN, //职业
        PROPUSER_EXP, //经验
        MONEY = PROPUSER_EXP + 2, //金钱
        YUANBAO, //元宝
        BIND_YUANBAO, //绑定元宝
        YINLIANG, //银两
        BIND_YINLIANG, //绑银
        ZHENQI, //真气
        COMATSTATE, //战斗状态
        STAMINA, //体能
        CUROFFLINEEXP, //离线经验
        SWORDSMANSCORE, //积分
        REPUTATION, //声望
        MODELVISUALID, //身体模型
        VIPCOST, //玩家VIP等级
        COMBATVALUE, //战力
        BINDINFOFATHER, //绑定信息 父id
        BINDINFOSON, //绑定信息  儿子id,为一个数组
        WEAPONDATAID, //武器id
        WEAPONEFFECTGEM, //武器特效表现的宝石id
        ABILITYLEVEL, //修为等级
        HEADEXP, //迎头经验
        PRIVATEEXP = HEADEXP + 2, //专用经验
        PKVAL = PRIVATEEXP + 2, //PK值
        ACTVAL, //活力值
        LUCKYVAL, //幸运值

        //新加积分属性
        CHAELLENGESCORE = 413, //门派积分
        GUANNING,
        FIGHTSCORE = 415, //比武积分
        QINGYIZHI = 417, //情义值积分
        SHOUZENG = 418, //受赠积分

        SNATCHSCORE = 420, //夺宝积分 
        PROPUSER_MAX,
        //};

        //登录数据相关
        LOGINDAYS = 421, //  已登陆天数
        RECHECKNUM = 422, //  补签次数(签到)
        TIMEDOUBLE = 423, //  是否能再领一次[在线时长]0,1
        JADECOST = 424, //  已花费灵玉
        PAYCOUNT = 425, // 已充值数

        //进阶幻化相关
        ADVANCEMOUNTID = 426, //坐骑幻化ID
        ADVANCEGODWEAPONID = 427, //神兵幻化ID 
        ADVANCEWISHID = 428, //暗幻化ID
        ADVANCESEALID = 429, //玉玺幻化ID
        ADVANCEMASKID = 430, //面具幻化ID
        ADVANCECROWNID = 431, //皇冠幻化ID

        CAPTAINLEVEL = 432, //队长福利等级
        CROSSSERVERSCORE = 434, //跨服声望
        EXPERIMENTSCORE = 435, //试炼副本积分
        BOSSCORE = 436, //boss积分

        //// 混合属性
        ////enum MIXTYPE
        //{
        MIXTYPE_BEGIN = 999, // 开始
        MIXTYPE_ALLATTACK = 1000, // 全攻击
        MIXTYPE_ALLDEF = 1001, // 全防御
        //};


        //装备
        EQUIP_XILIAN_NOGEM = 2001,
        EQUIP_XILIAN_GODGIVE = 2002,
        EQUIP_XILIAN_NOREFIT = 2003,
        EQUIP_XILIAN_EQUIPLEVEL = 2004,

        SKILL_LVL_ADD_1 = 2101,
        SKILL_LVL_ADD_2 = 2102,
        SKILL_LVL_ADD_3 = 2103,
        SKILL_LVL_ADD_4 = 2104,
        SKILL_LVL_ADD_5 = 2105,

        EQUIP_XILIAN_DURABLE = 2501,


        LEVEL_UP_EXP = 8000
    }

    public static string GetAttrName(PropertyID _PropID)
    {
        var strID = (int) _PropID + 10000;
        var propName = StrDictionary.GetClientDictionaryString("#{" + strID + "}");
        return propName;
    }

    public static string GetAttrName(PropertyID _PropID, int propSubID, int propValue)
    {
        var strID = (int) _PropID + 10000;
        var propName = StrDictionary.GetClientDictionaryString("#{" + strID + "}");
        if (_PropID == PropertyID.SKILLLVLADD)
        {
            if (propSubID < 0)
            {
                var profName = Utils.GetProfession(-2 - propSubID);
                propName = profName + propName;
            }
            else if (propSubID == 0)
            {
                propName = propName;
            }
            else
            {
                var skillbase = TableManager.GetSkillBaseByID(propSubID);
                if (skillbase == null)
                    Debug.LogError("SkillBase null:" + propSubID);
                var skillbaseName = skillbase.Name;
                propName = skillbaseName + propName;
            }
        }
        //else if (_PropID == PropertyID.VOCDAMAGERATE
        //    || _PropID == PropertyID.VOCDAMAGEREDUECRATE)
        //{
        //    propName = StrDictionary.GetClientDictionaryString("#{4742}") + propName;
        //}
        else if (_PropID == PropertyID.ATTACKRATEIGNORE)
        {
            var idx = propSubID + 13000;
            propName = StrDictionary.GetClientDictionaryString("#{" + idx + "}");
        }
        else if (_PropID == PropertyID.ATTACKRATEFIXDAM)
        {
            var idx = propSubID + 13100;
            propName = StrDictionary.GetClientDictionaryString("#{" + idx + "}");
        }
        else if (_PropID == PropertyID.ATTACKRATERECOVHP)
        {
            var idx = propSubID + 13200;
            propName = StrDictionary.GetClientDictionaryString("#{" + idx + "}");
        }
        else if (_PropID == PropertyID.ATTACKRATERECOVMP)
        {
            var idx = propSubID + 13300;
            propName = StrDictionary.GetClientDictionaryString("#{" + idx + "}");
        }
        else if (_PropID == PropertyID.DAMGRATEADDMONSTER)
        {
            var idx = propSubID + 13500;
            propName = StrDictionary.GetClientDictionaryString("#{" + idx + "}");
        }
        else if (_PropID == PropertyID.VOCDAMAGERATE)
        {
            var idx = propSubID + 13600;
            propName = StrDictionary.GetClientDictionaryString("#{" + idx + "}");
        }
        else if (_PropID == PropertyID.VOCDAMAGEREDUECRATE)
        {
            var idx = propSubID + 13700;
            propName = StrDictionary.GetClientDictionaryString("#{" + idx + "}");
        }

        return propName;
    }

    public static string GetAttrValue(PropertyID _PropID, int propSubID, int value)
    {
        var propName = GetAttrName(_PropID, propSubID, value);
        if (_PropID == PropertyID.EQUIP_XILIAN_NOGEM
            || _PropID == PropertyID.EQUIP_XILIAN_GODGIVE
            || _PropID == PropertyID.EQUIP_XILIAN_NOREFIT
            || _PropID == PropertyID.SKILL_LVL_ADD_1
            || _PropID == PropertyID.SKILL_LVL_ADD_2
            || _PropID == PropertyID.SKILL_LVL_ADD_3
            || _PropID == PropertyID.SKILL_LVL_ADD_4
            || _PropID == PropertyID.SKILL_LVL_ADD_5)
            return propName;
        if (_PropID == PropertyID.DAMGRATEADDMONSTER
            || _PropID == PropertyID.DAMGRATEADDPET
            || _PropID == PropertyID.DAMGRATEADDUSER
            || _PropID == PropertyID.DAMGRATEADDBOSS
            || _PropID == PropertyID.VOCDAMAGERATE
            || _PropID == PropertyID.VOCDAMAGEREDUECRATE
            || _PropID == PropertyID.ATTACKALLRATE
            || _PropID == PropertyID.DEFALLRATE
            || _PropID == PropertyID.MAXHPRATE
            || _PropID == PropertyID.MAXMPRATE
            || _PropID == PropertyID.MAXXPRATE
            || _PropID == PropertyID.PYSATTACKRATE
            || _PropID == PropertyID.MAGATTACKRATE
            || _PropID == PropertyID.PYSDEFRATE
            || _PropID == PropertyID.MAGDEFRATE
            || _PropID == PropertyID.HITRATE
            || _PropID == PropertyID.DODGERATE
            || _PropID == PropertyID.CRITICALRATE
            || _PropID == PropertyID.DECRITICALRATE
            || _PropID == PropertyID.STRIKERATE
            || _PropID == PropertyID.DUCTICALRATE
            || _PropID == PropertyID.CRITIADDRATE
            || _PropID == PropertyID.CRITIMISRATE
            || _PropID == PropertyID.INGDEFRATE
            || _PropID == PropertyID.REDUCEDAMRATE
            || _PropID == PropertyID.MOVESPEEDRATE
            || _PropID == PropertyID.ATTACKSPEEDRATE
            || _PropID == PropertyID.CUREAMOUNTRATE
            || _PropID == PropertyID.CONSTITURATE
            || _PropID == PropertyID.MORFIBRATE
            || _PropID == PropertyID.STRENGTHRATE
            || _PropID == PropertyID.INTELLENGRATE
            || _PropID == PropertyID.AGILERATE)
            return propName + " +" + value * 0.01 + "%";
        if (_PropID == PropertyID.EQUIP_XILIAN_DURABLE)
            return propName + " " + value + "%";
        if (_PropID == PropertyID.EQUIP_XILIAN_NOGEM
            || _PropID == PropertyID.EQUIP_XILIAN_GODGIVE
            || _PropID == PropertyID.EQUIP_XILIAN_NOREFIT
            || _PropID == PropertyID.ATTACKRATEIGNORE
            || _PropID == PropertyID.ATTACKRATEFIXDAM
            || _PropID == PropertyID.ATTACKRATERECOVHP
            || _PropID == PropertyID.ATTACKRATERECOVMP
        )
            return propName;
        if (_PropID == PropertyID.EQUIP_XILIAN_EQUIPLEVEL)
            ////临时代码-------------------------------------------
            //if (propName == GCGame.Table.StrDictionary.GetClientDictionaryString("#{12004}"))
            //{
            //    value = 108;
            //    return propName + " " + value;
            //}
            //else
            //{
            //    return propName + " -" + value;
            //}
            //value = 108;
            //return propName + " " + value;
            //------------------------------------------------------
            return propName + " -" + value;
        return propName + " +" + value;
    }

    public static float GetAttrValue(int value)
    {
        return value;
    }
}