module Dominion.Cards.Original (
  -- | Playing a card is easy:
  --
  -- > playerId `plays` adventurer
  module Dominion.Cards.Original                             
) where
import Dominion.Types

adventurer  = Card "Adventurer" 6 [Action] [AdventurerEffect]
bureaucrat  = Card "Bureaucrat" 4 [Action, Attack] [BureaucratEffect]

-- | 
-- > playerId `plays` cellar `with` (Cellar [list of cards to discard])
cellar      = Card "Cellar" 2 [Action] [PlusAction 1, CellarEffect]

-- > To move your deck into the discard pile:
--
-- > playerId `plays` chancellor `with` (Chancellor True)
--
-- If you don't want to, you don't have to use the followup action at all:
--
-- > playerId `plays` chancellor
chancellor  = Card "Chancellor" 3 [Action] [PlusCoin 2, ChancellorEffect]

-- | 
-- > playerId `plays` chapel `with` (Chapel [list of cards to trash])
chapel      = Card "Chapel" 2 [Action] [TrashCards 4]
councilRoom = Card "Council Room" 5 [Action] [PlusCard 4, PlusBuy 1, OthersPlusCard 1]

-- | To gain a market, for example:
--
-- > playerId `plays` feast `with` (Feast market)
feast       = Card "Feast" 4 [Action] [TrashThisCard, GainCardUpto 5]
festival    = Card "Festival" 5 [Action] [PlusAction 2, PlusCoin 2, PlusBuy 1]
laboratory  = Card "Laboratory" 5 [Action] [PlusCard 2, PlusAction 1]
library     = Card "Library" 5 [Action] [LibraryEffect]
market      = Card "Market" 5 [Action] [PlusAction 1, PlusCoin 1, PlusCard 1, PlusBuy 1]
militia     = Card "Militia" 4 [Action, Attack] [PlusCoin 2, OthersDiscardTo 3]

-- | 
-- > playerId `plays` mine `with` (Mine copper)
mine        = Card "Mine" 5 [Action] [MineEffect]
moat        = Card "Moat" 2 [Action, Reaction] [PlusCard 2]
moneylender = Card "Moneylender" 4 [Action] [MoneylenderEffect]

-- | To turn a gold into a province:
--
-- > playerId `plays` remodel `with` (Remodel (gold, province))
remodel     = Card "Remodel" 4 [Action] [RemodelEffect]
smithy      = Card "Smithy" 4 [Action] [PlusCard 3]

-- | The `Spy` `FollowupAction` takes two lists: a list of cards you would
-- discard for yourself, and a list of cards you would discard for others:
--
-- > playerId `plays` spy `with` ([estate, duchy, province], [silver, gold])
spy         = Card "Spy" 4 [Action, Attack] [PlusCard 1, PlusAction 1, SpyEffect]

                    -- gets a list of the treasure cards that the player
                    -- had. You return either TrashOnly to have the player
                    -- trash a card, or GainTrashedCard to gain the trashed
                    -- card.

-- | You need to provide a function that takes a list of treasure cards and
-- picks one to trash. You can either return a `TrashOnly` to trash the
-- card, or a `GainTrashedCard` to put it into your discard pile.
--
-- > playerId `plays` thief `with` (Thief (GainTrashedCard . sortBy (comparing coinValue)))
thief       = Card "Thief" 4 [Action, Attack] [ThiefEffect]

-- | 
-- > playerId `plays` throneRoom `with` (ThroneRoom market)
throneRoom  = Card "Throne Room" 4 [Action] [PlayActionCard 2]
village     = Card "Village" 3 [Action] [PlusCard 1, PlusAction 2]
witch       = Card "Witch" 5 [Action, Attack] [PlusCard 2, OthersGainCurse 1]
woodcutter  = Card "Woodcutter" 3 [Action] [PlusCoin 2, PlusBuy 1]

-- | 
-- > playerId `plays` workshop `with` (Workshop gardens)
workshop    = Card "Workshop" 3 [Action] [GainCardUpto 4]
gardens     = Card "Gardens" 4 [Victory] [GardensEffect]

-- All the action cards from the original game.
originalCards = [adventurer ,
                 bureaucrat ,
                 cellar     ,
                 chancellor ,
                 chapel     ,
                 councilRoom,
                 feast      ,
                 festival   ,
                 laboratory ,
                 library    ,
                 market     ,
                 militia    ,
                 mine       ,
                 moat       ,
                 moneylender,
                 remodel    ,
                 smithy     ,
                 spy        ,
                 thief      ,
                 throneRoom ,
                 village    ,
                 witch      ,
                 woodcutter ,
                 workshop   ,
                 gardens    ]