local W = {}

-- Local variables (module-scoped)
local current_field = 1

local function save_workout(workout_data)
  local entry = { "- date: " .. workout_data.date, "  type: " .. workout_data.type }

  -- Add fields dynamically
  for field, value in pairs(workout_data) do
    if field ~= "date" and field ~= "type" then
      if field == "exercises" then
        table.insert(entry, "  exercises:")
        for exercise in value:gmatch("[^,]+") do
          table.insert(entry, "    - " .. exercise:match("^%s*(.-)%s*$")) -- trim whitespace
        end
      else
        table.insert(entry, "  " .. field .. ": " .. value)
      end
    end
  end

  table.insert(entry, "")

  local workout_file = "/home/alex/notes/sport.yaml"
  local file = io.open(workout_file, "a")
  if file then
    file:write(table.concat(entry, "\n") .. "\n")
    file:close()
    print("" .. workout_data.type .. " workout logged!")
  else
    print("✗ Error: Could not open workout file")
  end
end

-- Local helper functions
local function collect_next_field(data, config)
  if current_field > #config then
    -- All fields collected, save workout
    save_workout(data)
    return
  end

  local field_config = config[current_field]
  vim.ui.input({ prompt = field_config.prompt }, function(input)
    if field_config.required and not input then
      return
    end
    if input then
      data[field_config.field] = input
    end
    current_field = current_field + 1
    collect_next_field(data, config)
  end)
end

-- Public function (exported)
function W.capture()
  local workout_configs = {
    handstand = {
      type = "équilibre",
      exercises = {
        { field = "durée", prompt = "Durée (sec): ", required = true },
      },
    },
    climbing = {
      type = "escalade",
      exercises = {
        { field = "durée", prompt = "Durée (min): ", required = true },
      },
    },
    running = {
      type = "course",
      exercises = {
        { field = "durée", prompt = "Durée (min): ", required = true },
      },
    },
    roller = {
      type = "roller",
      exercises = {
        { field = "durée", prompt = "Durée (sec): ", required = true },
        { field = "notes", prompt = "Notes: ", required = false },
      },
    },
    stretching = {
      type = "étirement", -- Fixed: was "tyepe"
      exercises = {
        { field = "hamstring", prompt = "Hamstring (sec): ", required = true },
        { field = "fenêtre", prompt = "Fenêtre (sec): ", required = true },
        { field = "pigeon", prompt = "Pigeon (sec): ", required = true },
        { field = "butterfly", prompt = "Butterfly (sec): ", required = true },
        { field = "middle_split", prompt = "Middle split (sec): ", required = true },
        { field = "pancake", prompt = "Pancake (sec): ", required = true },
      },
    },
    muscu = {
      type = "muscu",
      exercises = {
        { field = "pseudo_muscle_up", prompt = "Pseudo muscle up (reps): ", required = false },
        { field = "l-sit", prompt = "L-sit(sec): ", required = false },
        { field = "compression", prompt = "Compression (reps): ", required = false },
        { field = "extension", prompt = "Extension (reps): ", required = false },
        { field = "push_up_tucked", prompt = "Push up tucked (reps): ", required = false },
        { field = "planche_tucked", prompt = "Planche tucked (sec): ", required = false },
      },
    },
  }

  vim.ui.select(
    { "muscu", "roller", "handstand", "running", "stretching", "climbing" }, -- Added "climbing"
    { prompt = "Workout type:" },
    function(workout)
      if not workout then
        return
      end

      local config = workout_configs[workout]
      local data = {
        type = config.type, -- Fixed: proper access to type
        date = os.date("%Y-%m-%d"),
      }

      current_field = 1 -- Reset for each capture
      collect_next_field(data, config.exercises) -- Fixed: proper access to exercises
    end
  )
end

return W