local Config = require("lazy.core.config")
local Util = require("lazy.util")

---@type LazyState
local M = {}

---@class LazyState
local defaults = {
  checker = {
    last_check = 0,
  },
}

---@type LazyState
local data = nil

function M.read()
  pcall(function()
    ---@diagnostic disable-next-line: cast-local-type
    data = vim.json.decode(Util.read_file(Config.options.state))
  end)
  data = vim.tbl_deep_extend("force", {}, defaults, data or {})
end

function M.write()
  vim.fn.mkdir(vim.fn.fnamemodify(Config.options.state, ":p:h"), "p")
  Util.write_file(Config.options.state, vim.json.encode(data))
end

function M.__index(_, key)
  if not data then
    M.read()
  end
  return data[key]
end

function M.__setindex(_, key, value)
  if not data then
    M.read()
  end
  ---@diagnostic disable-next-line: no-unknown
  data[key] = value
end

return setmetatable(M, M)