package emu.grasscutter.game.props.ItemUseAction;

import java.util.Optional;

import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.props.ItemUseOp;
import emu.grasscutter.game.systems.InventorySystem;

public class ItemUseGainAvatar extends ItemUseInt {
    private int level = 1;
    private int constellation = 0;

    @Override
    public ItemUseOp getItemUseOp() {
        return ItemUseOp.ITEM_USE_GAIN_AVATAR;
    }

    public ItemUseGainAvatar(String[] useParam) {
        super(useParam);
        try {
            this.level = Integer.parseInt(useParam[1]);
        } catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {}
        try {
            this.constellation = Integer.parseInt(useParam[2]);
        } catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {}
    }

    @Override
    public boolean useItem(UseItemParams params) {
        int haveConstellation = InventorySystem.checkPlayerAvatarConstellationLevel(params.player, this.i);
        if (haveConstellation == -2 || haveConstellation >= 6) {
            return false;
        } else if (haveConstellation == -1) {
            var avatar = new Avatar(this.i);
            avatar.setLevel(this.level);
            avatar.forceConstellationLevel(this.constellation);
            avatar.recalcStats();
            params.player.addAvatar(avatar);
            return true;
        } else {
            int itemId = Optional.ofNullable(params.player.getAvatars().getAvatarById(this.i))
                .map(Avatar::getSkillDepot)
                .map(depot -> depot.getTalentCostItemId())
                .orElse((this.i % 1000) + 100);
            return params.player.getInventory().addItem(itemId);
        }
    }
}
