import { ActivityModelType } from '../../db/Activity';
import { ActivityNewHeroGachaModelType } from '../../db/ActivityNewHeroGacha';
import { RewardInter } from '../../pubUtils/interface';
import { parseGoodStr, splitString } from '../../pubUtils/util';
import { ActivityBase } from './activityField';


// 每个英雄的奖池配置数据
export class NewHeroGachaItem {
    selected: boolean = false;//选中武将
    floorCount: number = 0;//保底最大的次数,一定会出现一次
    count: number = 0;//多少次没有抽中
    hasGetFloor: boolean = false; // 是否有抽到保底，伪随机算法，抽到后未到保底次数强制不给
    hid: number = 0;//武将id
    name: string = '';//名字
    cost: RewardInter[];//每次抽卡消耗资源
    floorReward: number = 0;//保底奖励，percent下标+1
    percent: { id: number, weight: number, goodId: number }[];//奖品百分比  contentId & percent & id(英雄hid，物品id)
    commonReward: string = "";//固定奖 格式:1&3&1(类型&id&数量) 类型定义:1.英雄，2.物品

    constructor(data: any) {
        this.hid = data.hid;
        this.name = data.name;
        this.floorCount = data.floorCount;
        this.commonReward = data.commonReward;
        this.cost = parseGoodStr(data.cost);
        this.percent = [];
        this.floorReward = data.floorReward - 1;
        this.count = 0;
        this.selected = false;
        let arr = data.percent.split('|').filter(obj => { return obj && obj != '' });
        for (let obj of arr) {
            let numArr = splitString(obj, '&');
            this.percent.push({
                id: numArr[0],
                weight: numArr[1],
                goodId: numArr.length > 2 ? numArr[2] : 0,
            })
        }
    }
}



// 每日关卡活动数据
export class NewHeroGachaData extends ActivityBase {
    list: NewHeroGachaItem[] = [];

    public findItem(hid: number) {
        let index = this.list.findIndex(obj => { return obj && obj.hid == hid })
        return (index != -1) ? this.list[index] : null;
    }

    //解析玩家记录
    public setPlayerRecords(data: ActivityNewHeroGachaModelType) {
        if (!data) {
            return;
        }
        for (let item of this.list) {
            item.count = data.count ? data.count : 0;
            item.hasGetFloor = data.hasGetFloor||false;
            item.selected = (data && data.selectedHid == item.hid);
        }
    }

    public initData(data: string) {
        let dataObj = JSON.parse(data);
        let arr = dataObj;
        for (let obj of arr) {
            this.list.push(new NewHeroGachaItem(obj))
        }

    }

    constructor(activityData: ActivityModelType, createTime: number) {
        super(activityData, createTime)
        this.initData(activityData.data)
    }
}
