# Nomarchy State Schema
# Defines the complete state shape with defaults for both home and system state
{ lib }:

{
  # Home state defaults (user preferences)
  home = {
    # Theme and appearance
    theme = "nord";
    wallpaper = "";
    font = "JetBrainsMono Nerd Font";
    nightlightTemperature = 4000;

    # Feature toggles
    suspend = true;
    screensaver = true;
    idle = true;
    nightlight = false;
    waybar = true;
    skipVsCodeTheme = false;

    # Hyprland window manager settings
    hyprland = {
      gaps_in = 5;
      gaps_out = 10;
      border_size = 2;
    };
  };

  # System state defaults (system-level configuration)
  system = {
    # Theme (can differ from home for system-level theming)
    theme = "nord";

    # Timezone
    timezone = "UTC";

    # DNS configuration
    dns = "DHCP";  # Options: "DHCP", "Cloudflare", "Google", "Custom"
    customDns = [];

    # Wi-Fi settings
    wifi = {
      powersave = true;
    };

    # Optional features
    features = {
      fingerprint = false;
      fido2 = false;
      hybridGPU = false;
      makima = false;
    };
  };

  # Get a value from state with fallback to default
  getWithDefault = state: path: default:
    let
      pathList = lib.splitString "." path;
      getValue = obj: remaining:
        if remaining == [] then obj
        else if builtins.isAttrs obj && builtins.hasAttr (builtins.head remaining) obj
        then getValue obj.${builtins.head remaining} (builtins.tail remaining)
        else default;
    in getValue state pathList;
}
