module Distribution.NixOS.Derivation.Meta
  ( Meta(..)
  , module Distribution.NixOS.Derivation.License
  )
  where

import Distribution.NixOS.Derivation.PrettyPrinting
import Distribution.NixOS.Derivation.License
import Distribution.Text
import Text.PrettyPrint

data Meta = Meta
  { homepage    :: String
  , description :: String
  , license     :: License
  , platforms   :: [String]
  , maintainers :: [String]
  }
  deriving (Show, Eq, Ord)

instance Text Meta where
  disp  = renderMeta
  parse = error "parsing Distribution.NixOS.Derivation.Cabal.Meta is not supported yet"

renderMeta :: Meta -> Doc
renderMeta meta = vcat
  [ text "meta" <+> equals <+> lbrace
  , nest 2 $ vcat
    [ onlyIf (homepage meta) $ attr "homepage" $ string (homepage meta)
    , onlyIf (description meta) $ attr "description" $ string (description meta)
    , attr "license" $ disp (license meta)
    , onlyIf (platforms meta) $ sep
      [ text "platforms" <+> equals
      , nest 2 ((fsep $ punctuate (text " ++") $ map text (platforms meta))) <> semi
      ]
    , listattr "maintainers" (maintainers meta)
    ]
  , rbrace <> semi
  ]