{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}

module ACME.PreCure.Textbook.SplashStar.Types where


import           ACME.PreCure.Textbook.SplashStar.Words
import           ACME.PreCure.Types.TH

data Saki = Saki deriving (Eq, Show)
data Mai = Mai deriving (Eq, Show)

$(girlInstance [t| Saki |] girlName_Saki)
$(girlInstance [t| Mai |] girlName_Mai)

data CureBloom = CureBloom deriving (Eq, Show)
data CureEgret = CureEgret deriving (Eq, Show)

data MixCommune_Flappy = MixCommune_Flappy deriving (Eq, Show)
data MixCommune_Choppy = MixCommune_Choppy deriving (Eq, Show)

data CureBright = CureBright deriving (Eq, Show)
data CureWindy  = CureWindy deriving (Eq, Show)

data CrystalCommune_Flappy = CrystalCommune_Flappy deriving (Eq, Show)
data CrystalCommune_Choppy = CrystalCommune_Choppy deriving (Eq, Show)

transformedInstanceDefault [t| CureBloom |] cureName_Bloom introducesHerselfAs_Bloom
transformedInstanceDefault [t| CureEgret |] cureName_Egret introducesHerselfAs_Egret

transformedInstanceDefault [t| CureBright |] cureName_Bright introducesHerselfAs_Bright
transformedInstanceDefault [t| CureWindy  |] cureName_Windy  introducesHerselfAs_Windy

transformedGroupInstanceDefault
  [t| (CureBloom, CureEgret) |]
  groupName_SplashStar

transformedGroupInstance
  [t| (CureBright, CureWindy) |]
  groupName_SplashStar
  variation_Bright_Windy

transformationInstance
  [t| (Saki, Mai) |]
  [t| (MixCommune_Flappy, MixCommune_Choppy) |]
  [t| (CureBloom, CureEgret) |]
  [| (CureBloom, CureEgret) |]
  transformationSpeech_Bloom_Egret

transformationInstance
  [t| (Saki, Mai) |]
  [t| (CrystalCommune_Flappy, CrystalCommune_Choppy) |]
  [t| (CureBright, CureWindy) |]
  [| (CureBright, CureWindy) |]
  transformationSpeech_Bright_Windy

nonItemPurificationInstance
  [t| (CureBloom, CureEgret) |]
  purificationSpeech_Bloom_Egret

-- TODO: more purifications after confirming the phrases