// 装备套装表
import { readFileAndParse, parseNumberList, decodeArrayListStr } from '../util'
import { FILENAME } from '../../consts'

export interface DicEquipSuit {
    // id
    readonly id: number;
    // 匹配的武将的职业的大类
    readonly jobClass: number; 
    // 套装内含的装备编号
    readonly equips: number[];
    // 按星级可解锁的属性
    readonly effect: { star: number, id: number, val: number }[];
}

export const dicEquipSuit = new Map<number, DicEquipSuit>();
export const dicEquipSuitByJobClass = new Map<number, number>();
export function loadEquipSuit() {
    dicEquipSuit.clear();
    dicEquipSuitByJobClass.clear();
    let arr = readFileAndParse(FILENAME.DIC_EQUIP_SUIT);
    
    arr.forEach(o => {
        o.equips = parseNumberList(o.equips);
        o.effect = parseEffect(o.effect);
        dicEquipSuit.set(o.id, o);
        dicEquipSuitByJobClass.set(o.jobClass, o.id);
    });
    arr = undefined;
}

function parseEffect(str: string) {
    let result = new Array<{star: number, id: number, val: number}>();
    if(!str) return result;
    let decodeArr = decodeArrayListStr(str);
    for(let [star, id, val] of decodeArr) {
        if(isNaN(parseInt(star)) || isNaN(parseInt(id)) || isNaN(parseFloat(val))) {
            throw new Error('data table format wrong');
        }
        result.push({star: parseInt(star), id: parseInt(id), val: parseFloat(val)});
    }
    return result
}