# ============================================================================
# Windows Subsystem for Linux (WSL) Configuration
# ============================================================================
# Configuration for NixOS running in WSL2 on Windows.
# Integrates with nixos-wsl for WSL-specific functionality.

{
  lib,
  config,
  inputs,
  ...
}:
{
  imports = [
    inputs.nixos-wsl.nixosModules.default
    inputs.vscode-server.nixosModules.default
  ];

  # ========== Options ==========
  options.athenix.host.wsl.user = lib.mkOption {
    type = lib.types.str;
    default = "engr-ugaif";
    description = "The default user to log in as in WSL.";
  };

  config = {
    # ========== WSL Configuration ==========
    wsl.enable = true;
    # Use forUser if set, otherwise fall back to wsl.user option
    wsl.defaultUser =
      if config.athenix.forUser != null then config.athenix.forUser else config.athenix.host.wsl.user;

    # ========== Software Profile ==========
    athenix.sw.enable = lib.mkDefault true;
    athenix.sw.type = lib.mkDefault "headless";

    # ========== Remote Development ==========
    services.vscode-server.enable = true;

    # ========== Disable Irrelevant Systems ==========
    # WSL doesn't use traditional boot or disk management
    disko.enableConfig = lib.mkForce false;
    boot.loader.systemd-boot.enable = lib.mkForce false;
    boot.loader.grub.enable = lib.mkForce false;

    # WSL manages its own networking
    systemd.network.enable = lib.mkForce false;

    # Provide dummy values for required options from boot.nix
    athenix.host.filesystem.device = "/dev/null";
    athenix.host.filesystem.swapSize = "0G";
  };
}
