public Card getCardFromEnum(CardEnum cardEnum)
    {
        Card        card    = new Card(cardEnum);
        CardData    data    = new CardData();
        CardActions actions = new CardActions();

        if (cardEnum == CardEnum.smack)
        {
            data.attack = 5;
            data.playerCardData.needsTarget = true;
            data.playerCardData.memoryCount = 1;
            data.playerCardData.energyCost  = 1;
            actions.getDescriptionAction    = () =>
            {
                return("Deal " + actions.getDamageAmount(card) + " damage.");
            };
            data.description = actions.getModifiedDescription(data);

            data.name = "smack";
        }
        else if (cardEnum == CardEnum.defend)
        {
            data.defend = 5;
            data.playerCardData.memoryCount = 1;
            data.playerCardData.energyCost  = 1;
            actions.getDescriptionAction    = () =>
            {
                return("Gain " + actions.getBlockAmount(card) + " block.");
            };
            data.description = actions.getModifiedDescription(data);

            data.name = "defend";
        }
        else if (cardEnum == CardEnum.haymaker)
        {
            data.attack = 13;
            data.playerCardData.energyCost  = 1;
            data.playerCardData.needsTarget = true;
            data.name = "haymaker";

            actions.getDescriptionAction = () =>
            {
                return("Deal " + actions.getDamageAmount(card) + " damage.");
            };
            data.description = actions.getModifiedDescription(data);
        }
        else if (cardEnum == CardEnum.turtle)
        {
            data.defend = 13;
            data.playerCardData.energyCost = 2;
            data.name = "turtle";
            actions.getDescriptionAction = () =>
            {
                return("Gain " + actions.getBlockAmount(card) + " block.");
            };
            data.description = actions.getModifiedDescription(data);
        }
        else if (cardEnum == CardEnum.search)
        {
            data.cardsToDraw = 2;
            data.description = "Draw " + data.cardsToDraw + " cards.";
            data.name        = "search";
        }
        else if (cardEnum == CardEnum.swordAndShield)
        {
            data.attack = 7;
            data.defend = 4;
            data.playerCardData.energyCost  = 1;
            data.playerCardData.needsTarget = true;

            actions.getDescriptionAction = () =>
            {
                return("Gain " + actions.getBlockAmount(card) + " block" +
                       "\n" + "and deal " + actions.getDamageAmount(card) + " damage.");
            };
            data.description = actions.getModifiedDescription(data);

            data.name = "swordNshield";
        }
        else if (cardEnum == CardEnum.firstStrike)
        {
            data.attack = 14;
            data.playerCardData.energyCost      = 1;
            data.playerCardData.needsTarget     = true;
            data.playerCardData.firstCardPlayed = true;
            actions.getDescriptionAction        = () =>
            {
                return("Must be played first." + "\n" + "Deal " + actions.getDamageAmount(card) + " damage.");
            };
            data.description = actions.getModifiedDescription(data);

            data.name = "first strike";
        }
        else if (cardEnum == CardEnum.sweep)
        {
            data.attack = 7;
            data.playerCardData.energyCost = 1;
            data.playerCardData.hitsAll    = true;
            actions.getDescriptionAction   = () =>
            {
                return("Deal " + actions.getDamageAmount(card) + " damage to all enemies.");
            };
            data.description = actions.getModifiedDescription(data);

            data.name = "sweep";
        }
        else if (cardEnum == CardEnum.followUp)
        {
            data.attack      = 9;
            data.cardsToDraw = 1;
            data.playerCardData.energyCost  = 1;
            data.playerCardData.needsTarget = true;
            actions.getDescriptionAction    = () =>
            {
                return("Deal " + actions.getDamageAmount(card) + " damage and draw " + data.cardsToDraw + " card.");
            };
            data.description = actions.getModifiedDescription(data);

            data.name = "follow up";
        }
        else if (cardEnum == CardEnum.deflect)
        {
            data.cardsToDraw = 1;
            data.defend      = 8;
            data.playerCardData.energyCost = 1;
            actions.getDescriptionAction   = () =>
            {
                return("Gain " + actions.getBlockAmount(card) + " block and draw " + data.cardsToDraw + " card.");
            };
            data.description = actions.getModifiedDescription(data);

            data.name = "deflect";
        }
        else if (cardEnum == CardEnum.doubleSmack)
        {
            data.attack                     = 4;
            data.attackMultiplier           = 2;
            data.playerCardData.energyCost  = 1;
            data.playerCardData.needsTarget = true;
            actions.getDescriptionAction    = () =>
            {
                return("Deal " + actions.getDamageAmount(card) + " damage " + data.attackMultiplier + " times.");
            };
            data.description = actions.getModifiedDescription(data);

            data.name = "double smack";
        }
        else if (cardEnum == CardEnum.threaten)
        {
            data.playerCardData.needsTarget = true;
            data.playerCardData.energyCost  = 1;
            Status vulnerable = statusTypes.getStatusFromEnum(StatusTypes.StatusEnum.vulnerable);
            data.statuses.Add(vulnerable);

            Status weak = statusTypes.getStatusFromEnum(StatusTypes.StatusEnum.weak);
            data.statuses.Add(weak);

            actions.getDescriptionAction = () =>
            {
                return("Apply " + vulnerable.data.statusCount + " vulnerable and " + weak.data.statusCount + " weak.");
            };
            data.description = actions.getModifiedDescription(data);

            data.name = "threaten";
        }
        else if (cardEnum == CardEnum.terrorize)
        {
            data.playerCardData.hitsAll = true;
            data.exhaust = true;
            data.playerCardData.energyCost = 2;
            Status vulnerable = statusTypes.getStatusFromEnum(StatusTypes.StatusEnum.vulnerable);
            vulnerable.data.statusCount = 2;
            data.statuses.Add(vulnerable);

            Status weak = statusTypes.getStatusFromEnum(StatusTypes.StatusEnum.weak);
            weak.data.statusCount = 2;
            data.statuses.Add(weak);

            actions.getDescriptionAction = () =>
            {
                return("Apply " + vulnerable.data.statusCount + " vulnerable and " + weak.data.statusCount + " weak to all enemies. Exhaust.");
            };
            data.description = actions.getModifiedDescription(data);

            data.name = "terrorize";
        }
        else if (cardEnum == CardEnum.fortify)
        {
            Status armor = statusTypes.getStatusFromEnum(StatusTypes.StatusEnum.armor);
            armor.data.statusDeltaPerTurn = 0;
            armor.data.statusCount        = 4;
            data.playerCardData.statuses.Add(armor);

            data.exhaust = true;
            data.playerCardData.energyCost = 1;
            actions.getDescriptionAction   = () =>
            {
                return(armor.actions.getModifiedDescription(armor.data, null, null) + "\n" + "Removed.");
            };
            data.description = actions.getModifiedDescription(data);

            data.name = "fortify";
        }
        else if (cardEnum == CardEnum.sword)
        {
            data.attack = 5;
            data.playerCardData.needsTarget = true;
            actions.getDescriptionAction    = () =>
            {
                return("Deal " + actions.getDamageAmount(card) + " damage.");
            };
            data.description = actions.getModifiedDescription(data);
            data.name        = "sword";
        }
        else if (cardEnum == CardEnum.shield)
        {
            data.defend = 3;
            actions.getDescriptionAction = () =>
            {
                return("Gain " + actions.getBlockAmount(card) + " block.");
            };
            data.description = actions.getModifiedDescription(data);
            data.name        = "shield";
        }
        else if (cardEnum == CardEnum.shatter)
        {
            data.attack  = 12;
            data.exhaust = true;
            data.playerCardData.energyCost = 1;
            data.playerCardData.hitsAll    = true;
            actions.getDescriptionAction   = () =>
            {
                return("Deal " + actions.getDamageAmount(card) + " damage to all enemies. Exhaust.");
            };
            data.description = actions.getModifiedDescription(data);
            data.name        = "shatter";
        }
        else if (cardEnum == CardEnum.hiddenDaggers)
        {
            data.attack = 8;
            data.playerCardData.energyCost  = 1;
            data.playerCardData.needsTarget = true;
            actions.getDescriptionAction    = () =>
            {
                return("Deal " + actions.getDamageAmount(card) + " damage and add one dagger to your hand.");
            };
            actions.onCardPlayedAction = () =>
            {
                Card newDagger = getCardFromEnum(CardEnum.dagger);
                GameData.getInstance().deckService.addCardToHand(newDagger);
                GameData.getInstance().deckService.deckData.cardsToRemoveAfterFight.Add(newDagger);
            };
            data.description = actions.getModifiedDescription(data);
            data.name        = "hiddenDaggers";
        }
        else if (cardEnum == CardEnum.dagger)
        {
            data.attack = 3;
            data.playerCardData.needsTarget = true;
            actions.getDescriptionAction    = () =>
            {
                return("Deal " + actions.getDamageAmount(card) + " damage.");
            };
            data.description = actions.getModifiedDescription(data);
            data.name        = "dagger";
        }
        else if (cardEnum == CardEnum.reload)
        {
            data.exhaust = true;
            data.playerCardData.needsTarget = false;
            actions.getDescriptionAction    = () =>
            {
                return("Move all dagger cards from discard pile to your hand. Exhaust.");
            };
            actions.onCardPlayedAction = () =>
            {
                List <Card> daggerCards = new List <Card>();
                foreach (Card discardCard in GameData.getInstance().deckData.discardCards)
                {
                    if (discardCard.cardEnum == CardEnum.dagger)
                    {
                        daggerCards.Add(discardCard);
                    }
                }

                foreach (Card daggerCard in daggerCards)
                {
                    GameData.getInstance().deckService.addCardToHand(daggerCard);
                    GameData.getInstance().deckService.deckData.discardCards.Remove(daggerCard);
                }
            };
            data.description = actions.getModifiedDescription(data);
            data.name        = "reload";
        }
        else
        {
            throw new System.Exception("invalid status enum provided: " + cardEnum);
        }
        card.data    = data;
        card.actions = actions;
        return(card);
    }