{-|
Module      : Twfy.Data.MP
Description : MP data types

MP data types
-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}

module Twfy.Data.MP
       (
         MP(..)
       )
       where

import GHC.Generics
import Data.Aeson.TH
import qualified Data.Text as T
import Twfy.Util.Json (recordNameToJsonName)

-- | MP Data
--
-- Does not yet include office data
data MP = MP {

  -- | Member ID (TODO:who allocates these?). Arrives as text but appears to be integer
  mpMemberId :: T.Text

  -- | House (TODO: semantics?). Arrives as text but appears to be integer
  , mpHouse :: T.Text

  -- | Constituency name
  , mpConstituency :: T.Text

    -- | Party name. (TODO: what does independant show?)
  , mpParty :: T.Text

    -- | Date entered house. (TODO: convert to date - format appears to be YYYY-MM-DD)
  , mpEnteredHouse :: T.Text

    -- | Date left house. (TODO: convert to date - format appears to be YYYY-MM-DD and 9999-12-31 for Still Here)
  , mpLeftHouse :: T.Text

    -- | Reason for entering house
  , mpEnteredReason :: T.Text

    -- | Reason for leaving house
  , mpLeftReason :: T.Text

    -- | Person ID (TODO:who allocates these?). Arrives as text but appears to be integer
  , mpPersonId :: T.Text

    -- | Last update time stamp. (TODO: convert to time - format appears to be ''YYYY-MM-DD HH:MM:SS')
  , mpLastupdate :: T.Text

    -- | Title
  , mpTitle :: T.Text

    -- | Given name
  , mpGivenName :: T.Text

    -- | Family name
  , mpFamilyName :: T.Text

    -- | Full name
  , mpFullName :: T.Text

    -- | URL (TODO: looks like a URL Path for the TWFY site, should maybe create a URL here somehow)
  , mpUrl :: T.Text

    -- | Image (TODO: looks like a URL Path for the TWFY site, should maybe create a URL here somehow)
  , mpImage :: T.Text

    -- | Image height
  , mpImageHeight :: Int

    -- | Image width
  , mpImageWidth :: Int

    -- TODO: , mpOffice :: [Office]
  }
        deriving (Show,Generic)
$(deriveJSON defaultOptions { fieldLabelModifier = recordNameToJsonName } ''MP)

-- SAMPLE output from API - remaining stuff not included above
-- {
--   "office":[
--     {
--       "moffice_id":"uk.parliament.data/Member/4389/OppositionPost/1177",
--       "dept":"",
--       "position":"Shadow Minister (Housing)",
--       "from_date":"2016-10-10",
--       "to_date":"9999-12-31",
--       "person":"25343","source":""
--     },
--     {
--       "moffice_id":"uk.parliament.data/Member/4389/Committee/328",
--       "dept":"Women and Equalities Committee",
--       "position":"Member",
--       "from_date":"2015-07-06",
--       "to_date":"9999-12-31",
--       "person":"25343","source":""
--     }
--     ]
--   }