# --------------------------------------------------
# How to use?
# * start the icecast
# * connect via mixxx to it.
# * add the podcast to mpd in the same network
# --------------------------------------------------
{
  pkgs,
  config,
  lib,
  ...
}:
with lib;

let
  # todo : make option
  user = "username";
  password = "password";
  mountPoint = "/radio.mp3";
  maxListeners = 20;
in

{

  options.components.media.icecast.enable = mkOption {
    type = lib.types.bool;
    #default = config.components.media.enable;
    default = false;
  };

  config = mkIf (config.components.media.icecast.enable) {

    services.icecast = {
      enable = true;
      hostname = config.networking.hostName;
      admin = {
        user = "palo";
        password = "palo";
      };
      # http://icecast.org/docs/icecast-2.4.1/config-file.html
      extraConf = ''
        <mount type="normal">
        <mount-name>${mountPoint}</mount-name>
        <username>${user}</username>
        <password>${password}</password>
        <max-listeners>${toString maxListeners}</max-listeners>
        <max-listener-duration>3600</max-listener-duration>
        <charset>UTF8</charset>
        <public>1</public>
        <stream-name>Palos Awesome Stream</stream-name>
        <stream-description>Kick ass Tracks</stream-description>
        <stream-url>https://ingolf-wagner.de</stream-url>
        <genre>classical</genre>
        <bitrate>320</bitrate>
        <type>application/ogg</type>
        <subtype>vorbis</subtype>
        <hidden>1</hidden>
        <burst-size>65536</burst-size>
        <mp3-metadata-interval>4096</mp3-metadata-interval>
        </mount>
      '';
    };

    # use port which I can see in iptable -L -v -n
    networking.firewall = {
      allowedTCPPorts = [ config.services.icecast.listen.port ];
      allowedUDPPorts = [ config.services.icecast.listen.port ];
    };

    # don't want to have the service running all the time
    # ---------------------------------------------------
    systemd.services.icecast.wantedBy = lib.mkForce [ ];
    systemd.services.icecast.after = lib.mkForce [ ];

  };
}