package it.polimi.ingsw.gc14.Model.Cards.Building.Effects;

import it.polimi.ingsw.gc14.Model.Cards.Building.EffectType;
import it.polimi.ingsw.gc14.Model.Cards.BuildingCard;
import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType;
import it.polimi.ingsw.gc14.Model.Player;

public class Building11 extends BuildingCard {
    private CharacterType icon ;

    /**
     * Returns the CharacterType associated with this building card effect.
     *
     * @return the CharacterType associated with this building card effect.
     */
    public CharacterType getIcon() {return icon;}
    private int PrestigeMul;

    /**
     * Returns the prestige multiplier associated with this building card effect.
     *
     * @return the prestige multiplier associated with this building card effect.
     */
    public int getPrestigeMul() {return PrestigeMul;}

    /**
     * Creates a Building11 card with the specified era, price, prestige value,
     * character type icon, and prestige multiplier.
     *
     * @param era the era of the building card.
     * @param price the price of the building card.
     * @param prestigeValue the prestige value of the building card.
     * @param icon the CharacterType associated with the building card effect.
     * @param prestigeMul the prestige multiplier of the building card effect.
     */
    public Building11(int era, int price,int prestigeValue, CharacterType  icon, int prestigeMul) {
        super(era,price,prestigeValue);
        effectType = EffectType.FINAL;
        effectId = 11;
        this.icon = icon;
        this.PrestigeMul = prestigeMul;
    }

    /**
     * Creates and returns a copy of this Building11 card.
     *
     * @return a clone of this Building11 card.
     */
    @Override
    public BuildingCard clone() {
        return new Building11(getEra(),getPrice(),getPrestigeValue(), getIcon(), getPrestigeMul());
    }

    /**
     * Applies the effect of this building card to the specified player.
     * The effect grants prestige points equal to the number of cards of the
     * associated CharacterType owned by the player, multiplied by the prestige multiplier.
     *
     * @param player the player to whom the effect is applied-
     * @throws IllegalArgumentException if the player does not own this building card-
     */
    @Override
    public void applyEffect(Player player) throws IllegalArgumentException {
        if(!player.buildingCards.contains(this))
            throw new IllegalArgumentException();
        player.addPrestige(player.getNType(getIcon()) * this.getPrestigeMul());
    }
}