module ModulePage.View exposing (..)

import Html exposing (Html)
import Json.Encode as Encode
import ModulePage.Model exposing (ModuleInfo)
import Palette exposing (classes)
import Services.Model exposing (Record)
import String.Interpolate exposing(interpolate)

view : ModuleInfo -> Html msg
view moduleInfo =
    Html.div [classes "cf ph2-ns"]
    [ Html.span [classes "fl w-100 f1 lh-title dark-red"] [Html.text ("Module: " ++ moduleInfo.name)]
    , Html.span [classes "fl w-100 light-red"] [Html.text (moduleInfo.id)]
    , viewInfo moduleInfo
    ]

viewInfo : ModuleInfo -> Html msg
viewInfo moduleInfo =
    Html.article [classes "cf"]
    [ Html.div [classes "fl w-30 gray mv1"] [Html.text "AUTHOR"]
    , Html.div [classes "fl w-70 mv1"] [ Html.span [classes "fl w-100 black b"] [Html.text moduleInfo.author], Html.span [classes "fl w-100 black"] [Html.text moduleInfo.authorPeerId]]
    , Html.div [classes "fl w-30 gray mv1"] [Html.text "DESCRIPTION"]
    , Html.div [classes "fl w-70 mv1"] [ Html.span [classes "fl w-100 black"] [Html.text moduleInfo.description]]
    , Html.div [classes "fl w-30 gray mv1"] [Html.text "INTERFACE"]
    , Html.div [classes "fl w-70 mv1"] [ Html.span [classes "fl w-100 black"] (recordsToString moduleInfo.service.interface.record_types)]
    ]

recordsToString : List Record -> List (Html msg)
recordsToString record =
    (List.map recordToString record)

recordToString : Record -> Html msg
recordToString record =
    Html.div [classes "i"]
    ([Html.span [classes "fl w-100 mt2"] [Html.text (record.name ++ " {")]] ++
    fieldsToString record.fields ++
    [Html.span [classes "fl w-100 mb2"] [Html.text ("}")]])


fieldsToString : List (List String) -> List (Html msg)
fieldsToString fields =
    (fields |> List.map (\f -> Html.span [classes "fl w-100 ml2"] [Html.text (String.join ": " f)] ))