// Interfaces
import { R } from ".."
import { CsrfResponse } from "../interfaces/i_CsrfResponse"

export async function fetchAction(request: Request, ctx: R): Promise<Response> {
    const res = await fetch(request)
        .then( async data => {
            if(!data.ok){
                return Promise.reject(data.status)
            }
            return data
        })/* .catch(async function (error) {
            switch(error){
                case 459:
                    if(ctx.csrfUrl == undefined) throw new Error('CSRF invalid')
                    const csrf: CsrfResponse = await ctx.getJSON({url: ctx.csrfUrl}) as CsrfResponse
                    ctx.setGeneralHeader('X-CSRF-Token', csrf.csrf_token)
                    ctx.setGetHeader('X-CSRF-Token', csrf.csrf_token)
                    ctx.setPostHeader('X-CSRF-Token', csrf.csrf_token)
                    ctx.setPutHeader('X-CSRF-Token', csrf.csrf_token)
                    ctx.setDeleteHeader('X-CSRF-Token', csrf.csrf_token)
                    request.headers.set('X-CSRF-Token', csrf.csrf_token)
                    console.log('New CSRF-Token set')
                    console.log('Fetch again')
                    console.log(request)
                    const settings: RequestInit = {
                        body: request.body,
                        cache: request.cache,
                        credentials : request.credentials,
                        headers: request.headers,
                        integrity: request.integrity,
                        keepalive : request.keepalive,
                        method: request.method,
                        mode: request.mode,
                        redirect: request.redirect,
                        referrer: request.referrer,
                        referrerPolicy: request.referrerPolicy,
                        signal: request.signal
                    }
                    const rqst = new Request(request.url, settings)
                    console.log('NEW Request')
                    return await fetch(rqst)
                    break;
            }

        }) */
    console.log('Response')
    console.log(res)
    return res
}