class IcecastEchoApi {
    static path_get_stream_path = "/api/icecast/stream";
    static path_get_statistics_path = "/api/icecast/statistics";
    static path_get_rules = "/api/rules";
    static path_create_rule = "/api/rules";
    static path_patch_rules = "/api/rules";
    static path_delete_rules = "/api/rules";
    static path_create_rule_from_file = "/api/rules/from_file";
    static async create_rule(start, name, auth_string) {
        const response = await fetch(this.path_create_rule + "?" + new URLSearchParams({start : start, name : name}).toString(), {
            method: 'POST',
            headers: {
                "Authorization": 'Basic ' + auth_string,
            }
        })
    }
    static async get_rules(auth_string) {
        const response = await fetch(this.path_get_rules, {
            method: "GET",
            mode: "cors",
            cache: "no-cache",
            credentials: "same-origin",
            headers: {
              "Content-Type": "application/json",
              "Authorization": 'Basic ' + auth_string,
            },
            redirect: "follow",
            referrerPolicy: "no-referrer",
          });   
        return await response.json();
    }
    static async create_rule_from_file(start, file, auth_string) {
        const formData = new FormData();
        formData.append('file', file);
        const response = await fetch(this.path_create_rule_from_file + "?" + new URLSearchParams({start : start}).toString(), {
            method: 'POST',
            headers: {
                "Authorization": 'Basic ' + auth_string,
            },
            body: formData
        })
    }
    static async delete_rule(id, auth_string) {
        const response = await fetch(this.path_delete_rules + "/" + id, {
            method: "DELETE",
            mode: "cors",
            cache: "no-cache",
            credentials: "same-origin",
            headers: {
            "Content-Type": "application/json",
            "Authorization": 'Basic ' + auth_string,
            },
            redirect: "follow",
            referrerPolicy: "no-referrer",
        });
    }
    static async getStreamPath(auth_string) {
        const response = await fetch(this.path_get_stream_path, {
            method: "GET",
            headers: {
              "Authorization": 'Basic ' + auth_string,
            },
          });   
        return await response.text();
    }
    static async getStatisticsPath(auth_string) {
        const response = await fetch(this.path_get_statistics_path, {
            method: "GET",
            headers: {
              "Authorization": 'Basic ' + auth_string,
            },
          });   
        return await response.text();
    }
}
  