import { ApiCall } from "tsrpc";
import { EquipFun } from '../../public/equip';
import { HeroFun } from '../../public/hero';
import { ReqWear, ResWear } from "../../shared/protocols/equip/PtlWear";
import { ServiceType } from '../../shared/protocols/serviceProto';
import { EquipShared } from '../../shared/public/equip';
import kfjsFun from "../../public/kaifujingsai";

export default async function (call: ApiCall<ReqWear, ResWear, ServiceType>) {
    let hero = await HeroFun.getHero(call, call.req.heroId)

    if (!hero) return call.error(globalThis.lng.equip_10);
    if (hero.lv < G.gc.herocom.equipOpenLv) return call.error(`英雄${G.gc.herocom.equipOpenLv}级开启`);

    let equip = await EquipFun.getEquip(call, call.req.equipId);

    if (!equip) return call.error(globalThis.lng.equip_1);
    if (equip.wearaId == hero._id) return call.error(globalThis.lng.equip_11);

    if (hero.equip?.[G.gc.equip[equip.equipId].type]) {
        let oldEquip = EquipShared.fmtEquip(hero.equip?.[G.gc.equip[equip.equipId].type]);
        await EquipFun.changeEquipAttr(call, oldEquip, { wearaId: '' }, false);
    }

    await EquipFun.changeEquipAttr(call, equip, { wearaId: hero._id });

    let wearData = hero.equip || {};
    wearData[G.gc.equip[equip.equipId].type] = EquipShared.fmtEquip(equip);

    await HeroFun.changeHeroAttr(call, hero, { equip: wearData });

    call.succ({});

    kfjsFun.setEquipLvCount(call)

}