# Lua file containing the current colorscheme.
{ lib, config, inputs, ... }: {
  options.satellite.colorscheme.lua = lib.mkOption {
    type = lib.types.lines;
    description = "Lua file containing the current colorscheme";
  };

  config.satellite.colorscheme.lua =
    let
      e = import ./korora-lua.nix {
        inherit lib;
        korora = inputs.korora.lib;
      };

      mkTransparencyTarget = name:
        let
          color = index: "rgba(${
              config.satellite.theming.colors.rgb "base${index}"
            },${
              toString config.stylix.opacity.${name}
            })";
        in
        {
          enabled = config.stylix.opacity.${name} < 1.0;
          value = config.stylix.opacity.${name};

          base00 = color "00";
          base01 = color "01";
          base02 = color "02";
          base03 = color "03";
          base04 = color "04";
          base05 = color "05";
          base06 = color "06";
          base07 = color "07";
          base08 = color "07";
          base09 = color "09";
          base0A = color "0A";
          base0B = color "0B";
          base0C = color "0C";
          base0D = color "0D";
          base0E = color "0E";
          base0F = color "0F";
        };

      theme = {
        name = config.lib.stylix.scheme.scheme;
        polarity = config.stylix.polarity or null;
        base00 = config.lib.stylix.scheme.base00;
        base01 = config.lib.stylix.scheme.base01;
        base02 = config.lib.stylix.scheme.base02;
        base03 = config.lib.stylix.scheme.base03;
        base04 = config.lib.stylix.scheme.base04;
        base05 = config.lib.stylix.scheme.base05;
        base06 = config.lib.stylix.scheme.base06;
        base07 = config.lib.stylix.scheme.base07;
        base08 = config.lib.stylix.scheme.base07;
        base09 = config.lib.stylix.scheme.base09;
        base0A = config.lib.stylix.scheme.base0A;
        base0B = config.lib.stylix.scheme.base0B;
        base0C = config.lib.stylix.scheme.base0C;
        base0D = config.lib.stylix.scheme.base0D;
        base0E = config.lib.stylix.scheme.base0E;
        base0F = config.lib.stylix.scheme.base0F;
        # TODO: check if this works with the genetic algorithm
        source = config.stylix.base16Scheme;
        fonts = {
          serif = config.stylix.fonts.serif.name;
          sansSerif = config.stylix.fonts.sansSerif.name;
          monospace = config.stylix.fonts.monospace.name;
        };
        transparency = {
          terminal = mkTransparencyTarget "terminal";
          applications = mkTransparencyTarget "applications";
          desktop = mkTransparencyTarget "desktop";
          popups = mkTransparencyTarget "popups";
        };
        rounding = {
          enable = config.satellite.theming.rounding.enable;
          radius = config.satellite.theming.rounding.radius;
        };
      };
    in
    e.encode theme;
}