import { base, getToken } from './_config'

export function getGtfsBase() {

    return (base)
}
export async function getGtfsArchivo(params) {
    const query = !params ? '' : '?' + (new URLSearchParams(params).toString());
    const res = await fetch(`${base}/gtfs-archivo/${query}`, {
        headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" }
    })
    if (!res.ok) throw await res.json()
    return res.json()
}

export async function getGtfsArchivoId(id) {
    const res = await fetch(`${base}/gtfs-archivo/${id}/`, {
        headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" }
    })
    if (!res.ok) throw await res.json()
    return res.json()
}

export async function createGtfsArchivo(data) {
    const form = new FormData()
    form.append('status', 'PENDIENTE')
    for (let key in data) {
        if (key === 'archivo') {
            const file = data[key]
            form.append('binario', file)
            form.append(key, file.name)
        } else {
            form.append(key, data[key])
        }
    }

    const res = await fetch(`${base}/gtfs-archivo/`, {
        method: 'POST',
        body: form,
        headers: { "Authorization": `Bearer ${getToken()}` }
    })
    if (!res.ok) throw await res.json()
    return res.json()
}

export async function updateGtfsArchivo({ id_red: id = null, ...data }) {
    const res = await fetch(`${base}/gtfs-archivo/${id}/`, {
        method: 'PATCH',
        body: JSON.stringify(data),
        headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" }
    })
    if (!res.ok) throw await res.json()
    return res.json()
}

export async function deleteGtfsArchivo(id) {
    const res = await fetch(`${base}/gtfs-archivo/${id}/`, {
        method: 'DELETE',
        headers: { "Authorization": `Bearer ${getToken()}`, "Content-Type": "application/json" }
    })
    if (!res.ok) throw await res.json()
    return res.text()
}


export async function downloadGtfsArchivo(id) {
    const res = await fetch(`${base}/gtfs-archivo/download/?id=${id}`, {
        headers: { "Authorization": `Bearer ${getToken()}` }
    })
    if (!res.ok) throw await res.text()

    const filename = res.headers.get('content-disposition').split('filename=')[1].replace(/\"/g,'');
    const blob = await res.blob()
    const url = URL.createObjectURL(blob);

    // Crear un enlace <a> para simular la descarga
    let enlaceDescarga = document.createElement('a');
    enlaceDescarga.href = url;
    enlaceDescarga.download =  filename; // Establece el nombre del archivo
    enlaceDescarga.click();

    // Liberar la URL del Blob una vez que se haya completado la descarga
    URL.revokeObjectURL(url);
    enlaceDescarga.remove()
}