-- DreamStack Todo App
-- Showcases: push, len, for-in, string interpolation, array access, streaming
-- Stream to phone: dreamstack stream examples/todo.ds --relay ws://YOUR_IP:9100

let todos = ["Learn DreamStack", "Build something cool", "Ship it"]
let done = [0, 0, 0]
let input_text = ""
let next_id = 3
let filter_mode = "all"

-- Derived counts
let total = len(todos)

-- Stream: any device on the network can view / interact
stream todo on "ws://192.168.1.235:9100" { mode: signal }

view app =
  column [
    text "DreamStack Todos"
    text "{total} items"

    -- Add new todo
    row [
      input "" { bind: input_text, placeholder: "What needs to be done?" }
      button "Add" { click: push(todos, input_text), click: push(done, 0) }
    ]

    -- Todo list
    for item, i in todos ->
      row [
        button (if done[i] then "✅" else "⬜") { click: done[i] = (if done[i] then 0 else 1) }
        text (if done[i] then "  ̶{item}̶" else item)
      ]

    -- Controls
    row [
      text "{total} items"
      button "Clear All" { click: todos = [], click: done = [] }
    ]
  ]
