module Model.View.LoggedIn.Add
  ( AddPayment
  , Frequency(..)
  , initAddPayment
  , validateName
  , validateCost
  ) where

import Result as Result exposing (Result(..))

import Utils.Validation exposing (..)

import Model.Translations exposing (..)

type alias AddPayment =
  { name : String
  , nameError : Maybe String
  , cost : String
  , costError : Maybe String
  , frequency : Frequency
  }

initAddPayment : Frequency -> AddPayment
initAddPayment frequency =
  { name = ""
  , nameError = Nothing
  , cost = ""
  , costError = Nothing
  , frequency = frequency
  }

validateName : String -> Translations -> Result String String
validateName name translations =
  name
    |> validateNonEmpty (getMessage "CategoryRequired" translations)

validateCost : String -> Translations -> Result String Int
validateCost cost translations =
  cost
    |> validateNonEmpty (getMessage "CostRequired" translations)
    |> flip Result.andThen (validateNumber (getMessage "CostMustBeNumber" translations) (\number -> number >= 0))

type Frequency = Punctual | Monthly