{lib, config, ...}: 
with lib;
let
  cfg = config.modules.desktop.sway;
in
{
  config = mkIf cfg.enable {
    programs.waybar = {
      enable = true;
      systemd = {
        enable = true;
        target = "sway-session.target";
      };
      settings = {
        mainbar = {
          layer = "top";
          spacing = 6;
          disable-toolptips = true;
          modules-center = [];
          modules-left = [
            "sway/workspaces"
            "sway/mode"
          ];
          modules-right = [
            "network" 
            "custom/sep"
          ] ++ (
              if cfg.waybar.laptop then [
                "backlight"
                "battery"
                "custom/sep"
              ]
              else [
              ]
            ) ++
          [

            "memory"
            "cpu"
            "temperature"
            "custom/sep" 
          ] ++ (
              if cfg.waybar.gpuThermal.enable then [
                "temperature#gpu"
                "custom/sep"
              ] 
              else [
              ]
            ) ++ 
          [
            "pulseaudio"
            "custom/sep"
            "clock"
            "custom/sep"
            "tray"
          ];
          "clock" = {
            "format-alt" = "{:%Y-%m-%d}";
            "timezone" = "Europe/Paris";
            "tooltip" = false;
          };
          "cpu" = {
            "format" = "{usage}% {icon}";
            "format-icons" = [ "" ];
            "states" = {
              "critical" = 90;
              "warning" = 70;
            };
            "tooltip" = false;
          };
          "custom/sep" = {
            "format" = "|";
            "tooltip" = false;
          };
          "idle_inhibitor" = {
              "format" = "{icon}";
              "format-icons" = {
                "activated" = "";
                "deactivated" = "";
              };
          };
          "memory" = {
            "format" = "{used:0.1f}G/{total:0.1f}G ";
            "interval" = 30;
            "states" = {
              "critical" = 90;
              "warning" = 70;
            };
          };
          "network" = {
            "format-alt" = "{ifname}: {ipaddr}/{cidr}";
            "format-disconnected" = "Disconnected ⚠ ";
            "format-ethernet" = "{ifname}: {ipaddr}/{cidr} 󰈀 ";
            "format-linked" = "{ifname} (No IP) 󰈀 ";
            "format-wifi" = "{essid} ({signalStrength}%)  ";
            "tooltip" = false;
          };
          "pulseaudio" = {
            "format" = "{format_source} {volume}% {icon} ";
            "format-bluetooth" = "{volume}% {icon}";
            "format-icons" = {
              "car" = "";
              "default" = "";
              "handsfree" = "󰋎";
              "headphones" = "󰋋";
              "headset" = "󰋎";
              "phone" = "";
              "portable" = "";
            };
            "format-muted" = "{format_source} 󰝟 ";
            "format-source" = "{volume}%  ";
            "format-source-muted" = " ";
            "tooltip" = false;
          };
          "sway/mode" = {
              "format" = "<span style=\"italic\">{}</span>";
          };
          "sway/workspace" = {
              "disable-scroll" = true;
          };
          "temperature" = {
            "critical-threshold" = 80;
            "format" = "{temperatureC}°C  ";
            "thermal-zone" = mkIf ( cfg.waybar.cpuThermal.thermalZone != "" )
              "${cfg.waybar.cpuThermal.thermalZone}";
            "hwmon-path-abs" = mkIf ( cfg.waybar.cpuThermal.hwmonPathAbs != "" )
              "${cfg.waybar.cpuThermal.hwmonPathAbs}";
            "input-filename" = mkIf ( cfg.waybar.cpuThermal.inputFilename != "" )
              "${cfg.waybar.cpuThermal.inputFilename}";
          };
          "temperature#gpu" = {
            "critical-threshold" = 80;
            "format" = "GPU: {temperatureC}°C  ";
            "hwmon-path" = "${cfg.waybar.gpuThermal.hmonPath}";
          };
          "backlight" = {
            "format" = "{percent}% {icon}";
            "format-icons" = [
              "󰌶"
              "󱩏"
              "󱩐"
              "󱩐"
              "󱩑"
              "󱩒"
              "󱩓"
              "󱩔"
              "󱩕"
              "󱩖"
              "󰛨"
            ];
          };
          "battery" = {
            "tooltip" = false;
            "states" = {
              "full" = 100;
              "warning" = 30;
              "critical" = 15;
            };
            "format" = "{capacity}% {icon}";
            "format-charging" = "{capacity}% 󰓦";
            "format-plugged" = "{capacity}% ";
            "format-alt" = "{time} {icon}";
            "format-icons" = [
              " "
              " "
              " "
              " "
              " "
            ];
          };
        };
      };
      style = ''
        @define-color color-base-bg #323232;
        @define-color color-base-fg #ddd;

        @define-color color-hover #f268b3;
        @define-color color-selected #1cd180;

        @define-color color-ok #1cd180;
        @define-color color-warning #f2b768;
        @define-color color-critical #f268b3;

        * {
            border: none;
            border-radius: 0;
            min-height:0;
        }

        window#waybar {
            background: @color-base-bg ;
            color: @color-base-fg;
            font-family: "Fira Code Nerd Font";
            font-size: 12px;
        }

        button,
        button:disabled,label:disabled{
            color:inherit;
        }

        button:hover{
            background:none;
            box-shadow:inherit;
            box-shadow:inherit;
            text-shadow:inherit;
            text-shadow:inherit;
            border-top:none;
        }
        #workspaces {
            color:#fff;
        }
        #workspaces button {
            margin:0 3px;
            padding:4px 4px;
            color:#9c9c9c;
            border-bottom: 1px solid transparent;
        }

        #workspaces button:hover {
            box-shadow:inherit;
            text-shadow:inherit;
            color: @color-hover;
            border-bottom: 1px solid @color-hover;
        }

        #workspaces button.focused {
          background: @color-selected;
          color: @color-base-bg;
        }
        #workspaces button.visible:not(.focused) {
            color: @color-selected;
            border-color: @color-selected;
        }

        #clock,
        #cpu,
        #memory,
        #backlight,
        #network,
        #tray,
        #mode,
        #battery,
        #idle_inhibitor {
            padding: 2px 4px;
            margin: 0;
            background-color: transparent;
        }

        #mode{
            background:@color-warning;
            font-weight:bold;
        }
        #pulseaudio {}
        #pulseaudio.muted {
            color:@color-critical;
        }

        #battery.discharging {
            color: @color-base-fg;
            border-bottom: none;
        }

        #battery.charging, #battery.plugged {
            border-bottom: 1px solid @color-ok;
            color: @color-selected;
        }

        #battery.critical:not(.charging),
        #cpu.critical,
        #memory.critical{
            border-color: @color-critical;
            color: @color-critical;
        }

        #battery.warning:not(.charging),
        #cpu.warning,
        #memory.warning{
            border-color: @color-warning;
            color: @color-warning;
        }

        #tray {
            font-family: "DejaVu sans";
            font-size: 12px;
        }
      '';
    };
  };
}
