
async function ajaxRequest(url, method, data) {
    const options = {
        url: url,
        method: method,
        beforeSend: function(xhr) {
            xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
        }
    }

    if (data) {
        options.data = data;
        options.processData = false;
        options.contentType = false;
    }

    try {
        const response = await $.ajax(options);
        return response
    }
    catch (error) {
        return error
    }
}

// Saved Guilds

async function getSavedGuilds() {
    return await ajaxRequest("/api/saved-guilds/", "GET");
}

async function getSavedGuild(id) {
    return await ajaxRequest(`/api/saved-guilds/${id}/`, "GET");
}

async function newSavedGuild(formData) {
    return await ajaxRequest("/api/saved-guilds/", "POST", formData);
}

async function deleteSavedGuild(id) {
    return await ajaxRequest(`/api/saved-guilds/${id}/`, "DELETE");
}

// Loading Guilds

async function loadGuilds() {
    return await ajaxRequest("/guilds", "GET");
}

// Subscriptions

async function getSubscriptions(guildId) {
    const url = `/api/subscription/?guild_id=${guildId}`;
    return await ajaxRequest(url, "GET");
}

async function getSubscription(id) {
    return await ajaxRequest(`/api/subscription/${id}/`, "GET");
}

async function newSubscription(formData) {
    return await ajaxRequest("/api/subscription/", "POST", formData);
}

async function deleteSubscription(id) {
    return await ajaxRequest(`/api/subscription/${id}/`, "DELETE");
}


// Old functions
// Rewrite above



// function getSavedGuilds() {
//     return new Promise(function(resolve, reject) {
//         $.ajax({
//             url: "/api/saved-guilds/",
//             type: "GET",
//             beforeSend: function(xhr) {
//                 xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
//             },
//             success: function(response) {
//                 resolve(response);
//             },
//             error: function(response) {
//                 reject(response);
//             }
//         });
//     });
// }

// function getSavedGuild(id) {
//     return new Promise(function(resolve, reject) {
//         $.ajax({
//             url: `/api/saved-guilds/${id}/`,
//             type: "GET",
//             beforeSend: function(xhr) {
//                 xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
//             },
//             success: function(response) {
//                 resolve(response);
//             },
//             error: function(response) {
//                 reject(response);
//             }
//         });
//     });
// }

// function newSavedGuild(formData) {
//     return new Promise(function(resolve, reject) {
//         $.ajax({
//             url: "/api/saved-guilds/",
//             type: "POST",
//             data: formData,
//             processData: false,
//             contentType: false,
//             beforeSend: function(xhr) {
//                 xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
//             },
//             success: function(response) {
//                 resolve(response);
//             },
//             error: function(response) {
//                 reject(response);
//             }
//         });
//     });
// }

// function getSubscriptions() {
//     return new Promise(function(resolve, reject) {
//         $.ajax({
//             url: "/api/subscription/",
//             type: "GET",
//             beforeSend: function(xhr) {
//                 xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
//             },
//             success: function(response) {
//                 resolve(response);
//             },
//             error: function(response) {
//                 reject(response);
//             }
//         });
//     });
// }

// function getSubscription(uuid) {
//     return new Promise(function(resolve, reject) {
//         $.ajax({
//             url: `/api/subscription/${uuid}/`,
//             type: "GET",
//             beforeSend: function(xhr) {
//                 xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
//             },
//             success: function(response) {
//                 resolve(response);
//             },
//             error: function(response) {
//                 reject(response);
//             }
//         });
//     });
// }

// function getServer(serverId) {
//     return new Promise(function(resolve, reject) {
//         $.ajax({
//             url: `/api/serverlink/?server_id=${serverId}`,
//             type: "GET",
//             beforeSend: function(xhr) {
//                 xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
//             },
//             success: function(response) {
//                 resolve(response.results[0]);
//             },
//             error: function(response) {
//                 reject(response.results[0]);
//             }
//         });
//     });
// }

// function newSubscription(formData) {
//     return new Promise(function(resolve, reject) {
//         $.ajax({
//             url: "/api/subscription/",
//             type: "POST",
//             data: formData,
//             processData: false,
//             contentType: false,
//             beforeSend: function(xhr) {
//                 xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
//             },
//             success: function(response) {
//                 resolve(response);
//             },
//             error: function(response) {
//                 reject(response);
//             }
//         });
//     });
// }

// function editSubscription(uuid, formData) {
//     return new Promise(function(resolve, reject) {
//         $.ajax({
//             url: `/api/subscription/${uuid}/`,
//             type: "PUT",
//             data: formData,
//             processData: false,
//             contentType: false,
//             beforeSend: function(xhr) {
//                 xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
//             },
//             success: function(response) {
//                 resolve(response);
//             },
//             error: function(response) {
//                 reject(response);
//             }
//         });
//     });
// }

// function patchSubscription(uuid, formData) {
//     return new Promise(function(resolve, reject) {
//         $.ajax({
//             url: `/api/subscription/${uuid}/`,
//             type: "PATCH",
//             data: formData,
//             processData: false,
//             contentType: false,
//             beforeSend: function(xhr) {
//                 xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
//             },
//             success: function(response) {
//                 resolve(response);
//             },
//             error: function(response) {
//                 reject(response);
//             }
//         });
//     });
// }

// function deleteSubscription(uuid) {
//     return new Promise(function(resolve, reject) {
//         $.ajax({
//             url: `/api/subscription/${uuid}/`,
//             type: "DELETE",
//             beforeSend: function(xhr) {
//                 xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
//             },
//             success: function(response) {
//                 resolve(response);
//             },
//             error: function(response) {
//                 reject(response);
//             }
//         });
//     });
// }