{ config, lib, ... }:

let
  inherit (lib) mkIf mkOption types;

  cfg = config.music;
in
{
  options.music = {
    enable = mkOption {
      default = true;
      type = types.bool;
      description = ''Enables MPD server'';
    };
    directory = mkOption {
      default = "/ar1/Music";
      type = types.str;
      description = ''Path to your music directory'';
    };
    ncmpcpp.enable = mkOption {
      default = true;
      type = types.bool;
      description = ''Enables NCMPCPP (MPD Client)'';
    };
    rmpc.enable = mkOption {
      default = true;
      type = types.bool;
      description = ''
        Enables RMPC (Rusty Music Player Client) (another MPD Client)
      '';
    };
  };

  config = {
    services.mpd = {
      enable = cfg.enable;
      musicDirectory = cfg.directory;
      extraConfig = builtins.readFile ../config/mpd.conf;
    };

    programs = mkIf cfg.enable {
      ncmpcpp = {
        enable = cfg.ncmpcpp.enable;
        bindings = [
          { key = "k"; command = "scroll_up"; }
          { key = "j"; command = "scroll_down"; }
          { key = "l"; command = "next_column"; }
          { key = "l"; command = "slave_screen"; }
          { key = "h"; command = "previous_column"; }
          { key = "h"; command = "master_screen"; }
          { key = "G"; command = "move_end"; }
          { key = "g"; command = "move_home"; }
          { key = "alt-l"; command = "show_lyrics"; }
        ];
        settings = {
          ncmpcpp_directory = "~/.config/ncmpcpp";
          system_encoding = "utf-8";
          visualizer_output_name = "my_fifo";
          visualizer_type = "ellipse";
          visualizer_in_stereo = "yes";
          visualizer_look = "▀▋";
          visualizer_color = "blue, cyan, green, yellow, magenta, red, black";
          playlist_display_mode = "columns";
          media_library_primary_tag = "album_artist";
          media_library_hide_album_dates = true;
          playlist_shorten_total_times = "yes";
          playlist_editor_display_mode = "columns";
          lyrics_fetchers = "genius, internet";
          browser_display_mode = "columns";
          search_engine_display_mode = "columns";
          autocenter_mode = "yes";
          mouse_support = "yes";
          centered_cursor = "yes";
          follow_now_playing_lyrics = "yes";
          display_bitrate = "no";
          external_editor = "vim";
          progressbar_elapsed_color = "white";
          progressbar_color = "black";
          user_interface = "alternative";
          header_visibility = "no";
          statusbar_visibility = "yes";
          titles_visibility = "yes";
          progressbar_look = "━━";
          statusbar_color = "white";
          enable_window_title = "yes";
          now_playing_prefix = "$b$1";
          now_playing_suffix = "$8$/b";
          song_list_format = "$1  $2%A$8 - $8%t $R $3%l  ";
          song_status_format = "$b$7♫ $2%a $8- $3%b $8- $8%t ";
          song_window_title_format = " {%A} - {%t}";
          song_columns_list_format = "(23)[white]{a} (26)[yellow]{t|f} (40)[green]{b} (4)[blue]{l}";
          startup_slave_screen = "playlist";
          startup_slave_screen_focus = "yes";
          locked_screen_width_part = "50";
        };
      };

      rmpc.enable = cfg.rmpc.enable;
    };
  };
}
