let apiUri = `http://${window.location.host.split(':')[0]}:6531`

if(getCookie("apiUri") != ""){
    apiUri = getCookie("apiUri");
}
function getCookie(cname) {
    let name = cname + "=";
    let decodedCookie = decodeURIComponent(document.cookie);
    let ca = decodedCookie.split(';');
    for(let i = 0; i < ca.length; i++) {
        let c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}

async function GetData(uri){
    let request = await fetch(uri, {
        method: 'GET',
        headers: {
            'Accept': 'application/json'
        }
    });
    let json = await request.json();
    return json;
}

function PostData(uri){
    fetch(uri, {
        method: 'POST'
    });
}

function DeleteData(uri){
    fetch(uri, {
        method: 'DELETE'
    });
}

async function GetAvailableControllers(){
    var uri = apiUri + "/Connectors";
    let json = await GetData(uri);
    return json;
}

async function GetPublicationFromConnector(connectorName, title){
    var uri = apiUri + `/Publications/FromConnector?connectorName=${connectorName}&title=${title}`;
    let json = await GetData(uri);
    return json;
}

async function GetKnownPublications(){
    var uri = apiUri + "/Publications/Known";
    let json = await GetData(uri);
    return json;
}

async function GetPublication(internalId){
    var uri = apiUri + `/Publications/Known?internalId=${internalId}`;
    let json = await GetData(uri);
    return json;
}

async function GetChapters(internalId, connectorName, onlyNew, language){
    var uri = apiUri + `/Publications/Chapters?internalId=${internalId}&connectorName=${connectorName}&onlyNew=${onlyNew}&language=${language}`;
    let json = await GetData(uri);
    return json;
}

async function GetTaskTypes(){
    var uri = apiUri + "/Tasks/Types";
    let json = await GetData(uri);
    return json;
}
async function GetRunningTasks(){
    var uri = apiUri + "/Tasks/RunningTasks";
    let json = await GetData(uri);
    return json;
}

async function GetDownloadTasks(){
    var uri = apiUri + "/Tasks?taskType=MonitorPublication";
    let json = await GetData(uri);
    return json;
}

async function GetSettings(){
    var uri = apiUri + "/Settings";
    let json = await GetData(uri);
    return json;
}

async function GetKomgaTask(){
    var uri = apiUri + "/Tasks?taskType=UpdateLibraries";
    let json = await GetData(uri);
    return json;
}

function CreateMonitorTask(connectorName, internalId, reoccurrence, language){
    var uri = apiUri + `/Tasks/CreateMonitorTask?connectorName=${connectorName}&internalId=${internalId}&reoccurrenceTime=${reoccurrence}&language=${language}`;
    PostData(uri);
}

function CreateDownloadChaptersTask(connectorName, internalId, chapters, language){
    var uri = apiUri + `/Tasks/CreateDownloadChaptersTask?connectorName=${connectorName}&internalId=${internalId}&chapters=${chapters}&language=${language}`;
    PostData(uri);
}

function StartTask(taskType, connectorName, internalId){
    var uri = apiUri + `/Tasks/Start?taskType=${taskType}&connectorName=${connectorName}&internalId=${internalId}`;
    PostData(uri);
}

function EnqueueTask(taskType, connectorName, publicationId){
    var uri = apiUri + `/Queue/Enqueue?taskType=${taskType}&connectorName=${connectorName}&publicationId=${publicationId}`;
    PostData(uri);
}

function UpdateDownloadLocation(downloadLocation){
    var uri = apiUri + "/Settings/Update?"
    uri += "&downloadLocation="+downloadLocation;
    PostData(uri);
}

function UpdateKomga(komgaUrl, komgaAuth){
    var uri = apiUri + "/Settings/Update?"
    uri += `&komgaUrl=${komgaUrl}&komgaAuth=${komgaAuth}`;
    PostData(uri);
}

function UpdateKavita(kavitaUrl, kavitaUser, kavitaPass){
    var uri = apiUri + "/Settings/Update?"
    uri += `&kavitaUrl=${kavitaUrl}&kavitaUsername=${kavitaUser}&kavitaPassword=${kavitaPass}`;
    PostData(uri);
}

function UpdateGotify(gotifyUrl, gotifyAppToken){
    var uri = apiUri + "/Settings/Update?"
    uri += `&gotifyUrl=${gotifyUrl}&gotifyAppToken=${gotifyAppToken}`;
    PostData(uri);
}

function UpdateLunaSea(lunaseaWebhook){
    var uri = apiUri + "/Settings/Update?"
    uri += `&lunaseaWebhook=${lunaseaWebhook}`;
    PostData(uri);
}

function DeleteTask(taskType, connectorName, publicationId){
    var uri = apiUri + `/Tasks?taskType=${taskType}&connectorName=${connectorName}&publicationId=${publicationId}`;
    DeleteData(uri);
}

function DequeueTask(taskType, connectorName, publicationId){
    var uri = apiUri + `/Queue/Dequeue?taskType=${taskType}&connectorName=${connectorName}&publicationId=${publicationId}`;
    DeleteData(uri);
}

async function GetQueue(){
    var uri = apiUri + "/Queue/List";
    let json = await GetData(uri);
    return json;
}