module Pages.Contact.Inquiry exposing (Model, Msg, page)

import Config.Data.Identity exposing (pageNames)
import Config.Helpers.Cards.Inner.Text
    exposing
        ( detailBodyLink
        , detailBodyMaker
        , detailFormat
        )
import Config.Helpers.Cards.Outer.Helpers exposing (cardMaker)
import Config.Helpers.Cards.Outer.Types as C exposing (Cardable(..))
import Config.Helpers.Response
    exposing
        ( pageList
        , topLevelContainer
        )
import Config.Helpers.Viewport exposing (resetViewport)
import Config.Pages.Contact.Records exposing (contactInquiry)
import Config.Pages.Contact.Types exposing (Contact)
import Config.Style.Colour.Helpers
    exposing
        ( ThemeColor(..)
        , colourTheme
        )
import Effect exposing (Effect)
import Element as E
    exposing
        ( Device
        , DeviceClass(..)
        , Element
        , Orientation(..)
        , column
        , link
        , paddingEach
        , paragraph
        , spacing
        , text
        )
import Layouts
import Page exposing (Page)
import Route exposing (Route)
import Shared exposing (Model)
import View exposing (View)


page : Shared.Model -> Route () -> Page Model Msg
page shared route =
    Page.new
        { init = init
        , update = update
        , subscriptions = subscriptions
        , view = view shared
        }
        |> Page.withLayout toLayout


toLayout : Model -> Layouts.Layout Msg
toLayout model =
    Layouts.Navbar {}



-- INIT


type alias Model =
    {}


init : () -> ( Model, Effect Msg )
init () =
    ( {}
    , Effect.map
        (\_ -> NoOp)
        (Effect.sendCmd resetViewport)
    )



-- UPDATE


type Msg
    = NoOp


update : Msg -> Model -> ( Model, Effect Msg )
update msg model =
    case msg of
        NoOp ->
            ( model
            , Effect.none
            )



-- SUBSCRIPTIONS


subscriptions : Model -> Sub Msg
subscriptions model =
    Sub.none



-- VIEW


view : Shared.Model -> Model -> View Msg
view shared model =
    { title = pageNames.pageContact ++ " (inquiry)"
    , attributes = []
    , element = contactContainer shared.device
    }


contactContainer : Device -> Element msg
contactContainer device =
    topLevelContainer (contactList device)


contactList : Device -> Element msg
contactList device =
    column
        (case ( device.class, device.orientation ) of
            _ ->
                pageList device
        )
    <|
        List.concat
            [ List.map
                (\contact ->
                    cardMaker device (C.ContactPage contact) (contentList device contact)
                )
                [ contactInquiry ]
            ]


contentList : Device -> Contact -> List (Element msg)
contentList device contact =
    [ instructionBody device ]


instructionBody : Device -> Element msg
instructionBody device =
    column
        [ spacing 20
        , paddingEach
            { top = 10
            , bottom = 0
            , left = 0
            , right = 0
            }
        ]
        [ detailFormat paragraph
            [ detailBodyMaker TextLightGrey (text "For any inquiries related to services, debate invitations, or general questions regarding guest appearances, webinars, public speaking engagements, ghostwriting, or co-authorship opportunities, please feel free to contact me at ")
            , link
                []
                { url = "mailto:"
                , label = detailBodyLink TextLightOrange "contact@upRootNutrition.com"
                }
            , detailBodyMaker TextLightGrey (text ".")
            ]
        , detailFormat paragraph
            [ detailBodyMaker TextLightGrey (text "If you wish to submit a Discord ban appeal, you may do using the provided email address. Please include your user ID and a detailed statement detailing why you believe that you, or someone else, should be unbanned.") ]
        ]
