async function fetch_article(article_id) {
    return new Promise((resolve, reject) => {
        fetch(`/article/${article_id}`).then(async res => {
            if (res.status >= 400 && res.status < 600) {
                const text = await res.text();
                reject(text);
            } else {
                resolve(await res.json());
            }
        }).catch(e => reject(e))
    })
}

async function fetch_article_by_title(article_title) {
    const form_data = new FormData();
    form_data.append("title", article_title);

    return new Promise((resolve, reject) => {
        fetch(`/article-by-title/`, {
            method: "POST",
            body: new URLSearchParams(form_data),
        }).then(async res => {
            if (res.status >= 400 && res.status < 600) {
                const text = await res.text();
                reject(text);
            } else {
                resolve(await res.json());
            }
        }).catch(e => reject(e))
    })
}

async function fetch_articles_by_category(category) {
    return new Promise((resolve, reject) => {
        fetch(`/articles/${category}`).then(async res => {
            if (res.status >= 400 && res.status < 600) {
                const text = await res.text();
                reject(text);
            } else {
                resolve(await res.json());
            }
        }).catch(e => reject(e))
    })
}

async function fetch_post_article(article_data) {
    return new Promise((resolve, reject) => {
        fetch("/post-article", {
            credentials: 'include',
            method: "POST",
            headers: {
                "Content-Type": "application/json"
            },
            body: JSON.stringify(article_data),
        })
            .then(async res => {
                if (res.status >= 400 && res.status < 600) {
                    const text = await res.text();
                    reject(text)
                } else {
                    const json = await res.json();
                    resolve(json);
                }
            })
            .catch(err => reject(err))
    })
}

async function fetch_update_article(article_data) {
    return new Promise((resolve, reject) => {
        fetch(`/update-article/${article_data._id.$oid}`, {
            credentials: 'include',
            method: "PUT",
            headers: {
                "Content-Type": "application/json"
            },
            body: JSON.stringify(article_data),
        })
            .then(async res => {
                if (res.status >= 400 && res.status < 600) {
                    const text = await res.text();
                    reject(text)
                } else {
                    const json = await res.json();
                    resolve(json);
                }
            })
            .catch(err => reject(err))
    })
}

async function fetch_delete_article(article_id) {
    return new Promise((resolve, reject) => {
        fetch(`/delete-article/${article_id}`, {
            credentials: 'include',
            method: "DELETE"
        })
            .then(async res => {
                const text = await res.text();
                if (res.status >= 400 && res.status < 600) {
                    reject(text)
                } else {
                    resolve(text);
                }
            })
            .catch(err => reject(err))
    });
}


module.exports = {
    fetch_article,
    fetch_article_by_title,
    fetch_articles_by_category,
    fetch_post_article,
    fetch_update_article,
    fetch_delete_article,
}