package stsjorbsmod.cards.cull.deckoftrials;

import com.megacrit.cardcrawl.actions.AbstractGameAction;
import com.megacrit.cardcrawl.actions.common.DrawCardAction;
import com.megacrit.cardcrawl.actions.common.ExhaustSpecificCardAction;
import com.megacrit.cardcrawl.cards.CardQueueItem;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
import com.megacrit.cardcrawl.monsters.AbstractMonster;
import stsjorbsmod.JorbsMod;
import stsjorbsmod.actions.DecreaseMaxHpAction;
import stsjorbsmod.cards.CustomJorbsModCard;
import stsjorbsmod.characters.Cull;
import stsjorbsmod.patches.SelfExertField;

public class ProdigalMemory extends CustomJorbsModCard {
    public static final String ID = JorbsMod.makeID(ProdigalMemory.class);

    private static final CardRarity RARITY = CardRarity.SPECIAL;
    private static final CardTarget TARGET = CardTarget.SELF;
    private static final CardType TYPE = CardType.SKILL;
    public static final CardColor COLOR = Cull.Enums.CULL_CARD_COLOR;

    private static final int COST = 0;
    private static final int DRAW = 3;
    private static final int MAX_HP_LOSS = 2;
    private static final int UPGRADE_MAX_HP_LOSS = -1;

    public ProdigalMemory() {
        super(ID, COST, TYPE, COLOR, RARITY, TARGET);
        baseMagicNumber = magicNumber = MAX_HP_LOSS;
        urMagicNumber = baseUrMagicNumber = DRAW;
    }

    @Override
    public void use(AbstractPlayer p, AbstractMonster abstractMonster) {
        if (this.dontTriggerOnUseCard) {
            SelfExertField.selfExert.set(this, true);
            addToBot(new ExhaustSpecificCardAction(this, AbstractDungeon.player.hand));
        }
        else {
            addToBot(new DrawCardAction(DRAW));
            addToBot(new DecreaseMaxHpAction(p, p, magicNumber, AbstractGameAction.AttackEffect.POISON));
        }
    }

    @Override
    public void triggerOnEndOfTurnForPlayingCard() {
        this.dontTriggerOnUseCard = true;
        AbstractDungeon.actionManager.cardQueue.add(new CardQueueItem(this, true));
    }

    @Override
    public void upgrade() {
        if (!upgraded) {
            upgradeName();
            upgradeMagicNumber(UPGRADE_MAX_HP_LOSS);
            upgradeDescription();
        }
    }
}