module Pages.NotFound_ exposing (Model, Msg, page)

import Config.Data.Identity exposing (pageNames)
import Config.Helpers.Response
    exposing
        ( pageListCenter
        , topLevelContainer
        )
import Effect exposing (Effect)
import Element as E
    exposing
        ( Device
        , DeviceClass(..)
        , Element
        , Orientation(..)
        , column
        , none
        )
import Layouts
import Page exposing (Page)
import Route exposing (Route)
import Route.Path
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.none
    )



-- 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.pageNotFound
    , attributes = []
    , element = notFoundContainer shared.device
    }


notFoundContainer : Device -> Element msg
notFoundContainer device =
    topLevelContainer (notFoundList device)


notFoundList : Device -> Element msg
notFoundList device =
    column (pageListCenter device)
        [ case device.class of
            Desktop ->
                none

            BigDesktop ->
                none

            Tablet ->
                case device.orientation of
                    Portrait ->
                        none

                    Landscape ->
                        none

            Phone ->
                case device.orientation of
                    Portrait ->
                        none

                    Landscape ->
                        none
        ]
