import gleam/int
import lustre
import lustre/attribute
import lustre/element.{type Element}
import lustre/element/html
import lustre/event

pub fn main() {
  let app = lustre.simple(init, update, view)
  let assert Ok(dispatch) = lustre.start(app, "#app", Nil)

  dispatch
}

type Model =
  Int

fn init(_) -> Model {
  0
}

pub type Msg {
  Increment
  Decrement
}

fn update(model: Model, msg: Msg) -> Model {
  case msg {
    Increment -> model + 1
    Decrement -> model - 1
  }
}

fn view(model: Model) -> Element(Msg) {
  let count = int.to_string(model)

  html.div(
    [],
    [
      html.h1([], [element.text("Gleam + Vite + Tauri")]),
      html.p(
        [attribute.style([#("text-align", "center")])],
        [element.text("Gleam counter " <> count <> " ✨")],
      ),
      html.p(
        [attribute.style([#("text-align", "center")])],
        [
          html.button([event.on_click(Decrement)], [element.text("-")]),
          html.button([event.on_click(Increment)], [element.text("+")]),
        ],
      ),
    ],
  )
}