
-- see http://www.icecast.org/docs/icecast-2.3.3/icecast2_config_file.html#limits
CREATE TABLE icecast_limits (
  id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),

  -- number of listening clients
  clients INTEGER NOT NULL DEFAULT 1000,

  --number of sources include souce clients and relays
  sources INTEGER NOT NULL DEFAULT 50,

  -- maximum size (in bytes) of the stream queue
  queue_size INTEGER NOT NULL DEFAULT 102400,

  -- does not appear to be used
  client_timeout INTEGER DEFAULT 10,

  -- The maximum time (in seconds) to wait for a request to come in once
  -- the client has made a connection to the server.
  -- In general this value should not need to be tweaked.
  header_timeout INTEGER DEFAULT 15,

  -- If a connected source does not send any data within this
  -- timeout period (in seconds), then the source connection
  -- will be removed from the server.
  source_timeout INTEGER DEFAULT 10,

  --  The burst size is the amount of data (in bytes)
  -- to burst to a client at connection time.
  burst_size INTEGER DEFAULT 65536,

  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

 );


create table  icecast_admin_authentications (
  id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),

  -- The unencrypted password used by sources to connect to icecast2.
  -- The default username for all source connections is 'source' but
  -- this option allows to specify a default password. This and the username
  -- can be changed in the individual mount sections.
  source_password VARCHAR NOT NULL DEFAULT  'icejam321',

  -- Used in the master server as part of the authentication when a slave requests
  -- the list of streams to relay. The default username is 'relay'
  relay_user VARCHAR NOT NULL DEFAULT  'relay',
  relay_password VARCHAR NOT NULL DEFAULT  'jkrelayhack',

  --The username/password used for all administration functions.
  admin_user VARCHAR NOT NULL DEFAULT  'jkadmin',
  admin_password VARCHAR NOT NULL DEFAULT 'jKadmin123',

  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );


--contains all the settings for listing a stream on any of the Icecast2 YP Directory servers.
-- Multiple occurances of this section can be specified in order to be listed on multiple directory servers.
create table  icecast_directorys (
   id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
   yp_url_timeout integer not  null  default  15,
   yp_url character not  null UNIQUE default 'http://dir.xiph.org/cgi-bin/yp-cgi',
   created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

create table icecast_servermiscs (
  id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
    -- This is the DNS name or IP address that will be used for the stream directory lookups or possibily
    -- the playlist generation if a Host header is not provided. While localhost is shown as an example,
    -- in fact you will want something that your listeners can use.
    hostname character not null default 'concertsvr.jamkazam.com',
    --This sets the location string for this icecast instance. It will be shown e.g in the web interface.
    location character not null default 'earth',
    --This should contain contact details for getting in touch with the server administrator.
    admin character not null default 'icemaster@localhost',
    -- This flag turns on the icecast2 fileserver from which static files can be served.
    -- All files are served relative to the path specified in the <paths><webroot> configuration
    -- setting. By default the setting is enabled so that requests for the images
    -- on the status page are retrievable.
    fileserve INTEGER not null default 1,
    -- This optional setting allows for the administrator of the server to override the
    -- default server identification. The default is icecast followed by a version number
    -- and most will not care to change it however this setting will change that.
    server_id  character  not null default 'icecast 2.3',


   created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

create table icecast_listen_sockets (
    id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),

    -- The TCP port that will be used to accept client connections.
    port integer not null default  8001,

    -- An optional IP address that can be used to bind to a specific network card.
    -- If not supplied, then it will bind to all interfaces.
    bind_address character,

    shoutcast_mount character default NULL,
    shoutcast_compat INTEGER not null  default 0,

   created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);


create table icecast_mastersvr_relays (
    id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),

     -- ip address of the master icecast server and port number
    master_server character not null,
    master_server_port integer not null,
    --The interval (in seconds) that the Relay Server will poll the Master Server for any new mountpoints to relay.
    master_update_interval integer not null default 120,

    -- This is the relay username on the master server. It is used to query the server for a list of
    -- mountpoints to relay. If not specified then 'relay' is used
    master_username character not null default 'relay',
    master_password character not null,

    --Global on-demand setting for relays. Because you do not have individual relay options when
    -- using a master server relay, you still may want those relays to only pull the stream when
    -- there is at least one listener on the slave. The typical case here is to avoid surplus
    -- bandwidth costs when no one is listening.
   relays_on_demand INTEGER default 0,

   created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
   --make sure this combo is unique
   --CONSTRAINT serverID UNIQUE KEY (master_server,master_server_port)
);

create table icecast_relays (
   id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),

   -- ip address of server we are relaying from and port number
   server character not null,
   port integer not null default  8001,

   -- mount at server. eg /example.ogg
   mount character  not null,
   -- eg /different.ogg
   local_mount character not null,
   -- eg joe. could be null
   username character default  NULL ,
   -- user password
   password character default  null ,
   relay_shoutcast_metadata INTEGER default 0,
   --- relay only if we have someone wanting to listen
   on_demand INTEGER default 0,

  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

create TABLE icecast_user_authentications(
     id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
     --"htpasswd or url"
     type CHARACTER  DEFAULT  NULL ,
     -- these are for httpasswd
     filename  CHARACTER  default NULL,
     allow_duplicate_users INTEGER  DEFAULT 0,

     -- these options are for url
      -- eg value="http://myauthserver.com/stream_start.php"
     mount_add CHARACTER  default NULL,
     --value="http://myauthserver.com/stream_end.php"
     mount_remove CHARACTER  default NULL,
     --value="http://myauthserver.com/listener_joined.php"
     listener_add CHARACTER  default NULL,
     --value="http://myauthserver.com/listener_left.php"
     listener_remove CHARACTER  default NULL,
      -- value="user"
     username CHARACTER  default NULL,
     -- value="pass"
     password CHARACTER  default NULL,
     -- value="icecast-auth-user: 1"
     auth_header CHARACTER  default NULL,
     -- value="icecast-auth-timelimit:"
     timelimit_header CHARACTER  default NULL,

     created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
     updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);


create table icecast_mounts (
        id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
        -- eg/example-complex.ogg
        mount_name CHARACTER UNIQUE NOT NULL,
        username CHARACTER  NOT NULL DEFAULT 'jamsource',
        password CHARACTER NOT NULL DEFAULT 'jamksource',
        max_listeners INTEGER  NOT NULL DEFAULT 4,
        max_listener_duration INTEGER  NOT NULL DEFAULT 3600,
        --  dump of the stream coming through on this mountpoint.
        -- eg /tmp/dump-example1.ogg
        dump_file CHARACTER DEFAULT NULL,

         -- intro music to play
        -- This optional value specifies a mountpoint that clients are automatically moved to
        -- if the source shuts down or is not streaming at the time a listener connects.
        intro CHARACTER NOT NULL DEFAULT  '/intro.ogg',
        fallback_mount CHARACTER NOT NULL DEFAULT '/sourcedown.ogg',
        -- When enabled, this allows a connecting source client or relay on this mountpoint
        -- to move listening clients back from the fallback mount.
        fallback_override INTEGER DEFAULT  1,

        -- When set to 1, this will cause new listeners, when the max listener count for the mountpoint
        -- has been reached, to move to the fallback mount if there is one specified.
        fallback_when_full INTEGER DEFAULT 1,

        --For non-Ogg streams like MP3, the metadata that is inserted into the stream often
        -- has no defined character set.
        charset CHARACTER  NOT NULL DEFAULT 'ISO8859-1',
        -- possilble values are -1, 0, 1
        public INTEGER DEFAULT  1,

        stream_name VARCHAR NOT  NULL  DEFAULT  'My Jamkazam Audio Stream',
        stream_description VARCHAR NOT  NULL  DEFAULT  'My  JK audio description',
        -- direct to user page
        stream_url  CHARACTER  NOT NULL DEFAULT  'http://wwww.jamakazam.com#user_id',
        -- get this from the session info
        genre VARCHAR NOT  NULL DEFAULT 'Unknown',
        bitrate integer NOT  NULL  default  92,
        type CHARACTER  NOT NULL DEFAULT   'application/ogg' ,
        subtype CHARACTER  NOT NULL DEFAULT  'vorbis',
        -- Enable this to prevent this mount from being shown on the xsl pages.
        -- This is mainly for cases where a local relay is configured and you do
        -- not want the source of the local relay to be shown
        hidden INTEGER DEFAULT 1,

        -- This optional setting allows for providing a burst size which overrides the
        -- default burst size as defined in limits. The value is in bytes.
        burst_size INTEGER  DEFAULT 65536,
        mp3_metadata_interval INTEGER DEFAULT 4096,

        --called when the source  connects or disconnects. The scripts are called with the name of the mount
        on_connect CHARACTER DEFAULT '/home/icecast/bin/source-start',
        on_disconnect CHARACTER DEFAULT '/home/icecast/bin/source-end',

        created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        auth_id VARCHAR(64) NOT NULL REFERENCES icecast_user_authentications(id)
);


create table icecast_paths (
        id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
        basedir CHARACTER NOT NULL DEFAULT  './',
        logdir CHARACTER NOT NULL DEFAULT  './logs',
        pidfile CHARACTER NOT NULL DEFAULT  './icecast.pid',
        webroot CHARACTER NOT NULL DEFAULT  './web',
        adminroot CHARACTER NOT NULL DEFAULT  './admin',
        allow_ip CHARACTER NOT NULL DEFAULT  '/path/to/ip_allowlist',
        deny_ip CHARACTER NOT NULL DEFAULT  '/path_to_ip_denylist',
        alias CHARACTER DEFAULT  'source="/foo" dest="/bar"',

        created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);


create table icecast_loggings (
        id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
        accesslog CHARACTER NOT NULL DEFAULT 'access.log',
        errorlog CHARACTER NOT NULL DEFAULT 'error.log',
        playlistlog CHARACTER NOT NULL DEFAULT 'playlist.log',
        -- 4 Debug, 3 Info, 2 Warn, 1 Error
      	loglevel INTEGER NOT NULL DEFAULT 4 ,

        created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);


create table icecast_securitys (
        id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),

        chroot INTEGER NOT NULL  DEFAULT 0,
        changeowner_user CHARACTER DEFAULT 'nobody',
        changeowner_group CHARACTER DEFAULT 'nogroup',

        created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

create TABLE icecast_servers(
      id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(),
      icecast_limit_id  VARCHAR(64) REFERENCES icecast_limits(id)



  -- configs
  -- mounts

);


