# swaync — notification daemon + control centre, themed from
# theme-state.json. Until this shipped, nothing rendered notify-send at
# all: the theme-switch progress toasts, the CLI's font warnings and the
# live ISO's welcome message were all invisible.
{ config, lib, ... }:

let
  cfg = config.nomarchy;
  t = cfg.theme;
  c = t.colors;
  r = toString t.ui.rounding;
in
{
  config = lib.mkIf cfg.swaync.enable {
    services.swaync = {
      enable = true;

      settings = {
        positionX = "right";
        positionY = "top";
        control-center-margin-top = t.ui.gapsOut;
        control-center-margin-right = t.ui.gapsOut;
        control-center-width = 420;
        notification-window-width = 400;
        notification-icon-size = 48;
        timeout = 6;
        timeout-low = 3;
        timeout-critical = 0; # critical stays until dismissed
      };

      style = ''
        /* Palette baked from theme-state.json. Only roles guaranteed to
           contrast @base in EVERY palette are used: subtext/surface mean
           "on-surface" in some light themes (summer-day: subtext==base,
           surface==text — body text was invisible on hardware, item 25).
           Chips/hovers are alpha(@text) tints — contrast by construction.
           tools/check-theme-contrast.py guards the hex-on-hex pairings. */
        @define-color base ${c.base};
        @define-color text ${c.text};
        @define-color accent ${c.accent};
        @define-color bad ${c.bad};

        .notification {
          background: alpha(@base, 0.95);
          border: ${toString t.ui.borderSize}px solid alpha(@accent, 0.4);
          border-radius: ${r}px;
          color: @text;
          font-family: "${t.fonts.ui}", "${t.fonts.mono}";
          font-size: ${toString t.fonts.size}pt;
        }

        .notification-content .summary {
          color: @text;
          font-weight: bold;
        }

        .notification-content .body {
          color: @text;
        }

        .notification.critical {
          border-color: @bad;
        }

        .control-center {
          background: alpha(@base, 0.95);
          border: ${toString t.ui.borderSize}px solid alpha(@accent, 0.4);
          border-radius: ${r}px;
          color: @text;
          font-family: "${t.fonts.ui}", "${t.fonts.mono}";
          font-size: ${toString t.fonts.size}pt;
        }

        .control-center .notification-row:focus,
        .control-center .notification-row:hover {
          background: alpha(@text, 0.1);
          border-radius: ${r}px;
        }

        .widget-title {
          color: @text;
          font-weight: bold;
        }

        .widget-title > button {
          background: alpha(@text, 0.1);
          color: @text;
          border: none;
          border-radius: ${r}px;
        }

        .widget-title > button:hover {
          background: @accent;
          color: @base;
        }
      '';
    };
  };
}
