import { defineEventHandler, readBody } from 'h3'
import { useRuntimeConfig } from '#imports'
import axios from 'axios'

export default defineEventHandler(async (event) => {
  const config = useRuntimeConfig()
  const API_BASE_URL = config.public.apiBaseUrl
  const table = event.context.params?.table
  //const apiUrl = `${API_BASE_URL}${table}`

  const basePath = event.context.params?.basePath  // dynamic part like "administrator"
  const resource = event.context.params?.resource  // e.g., "roles"

  const query = getQuery(event)
  const queryString = new URLSearchParams(query).toString()


  const token = getHeaders(event)['authorization']
  const route_id = getHeaders(event)['route_id']
  
  if (!basePath || !resource) {
    return { error: 'Invalid API route parameters' }
  }

  const apiUrl = `${API_BASE_URL}${basePath}/${resource}`

  const method = event.node.req.method
  const body = method !== 'GET' ? await readBody(event) : null


  if(resource != "login" && !token){
    return { statusCode: 401, message: 'Unauthorized: No token provided',errors: [] }
  }

  const headerData = {
    //'Content-Type': 'application/json', // Ensures JSON data
     Authorization: token,
     'route_id': route_id
  };

  try {
    let response
    if (method === 'GET') response = await axios.get(`${apiUrl}?${queryString}`,{headers: headerData})
    else if (method === 'POST') response = await axios.post(apiUrl, body,{headers: headerData})
    else if (method === 'PUT') response = await axios.put(`${apiUrl}`, body, {headers: headerData})
    else if (method === 'DELETE') response = await axios.delete(`${apiUrl}`,{headers: headerData})

    return response?.data

  } catch (error ) {
    
    if (axios.isAxiosError(error) && error.response) {
      return {
        statusCode: error.response.status,
        message: error.response.data.message || 'An error occurred',
        errors: error.response.data.errors || null, // Include validation errors
      }
    }else{
      return {
        statusCode: 500,
        message: 'Internal Server Error',
        errors: []
      }
    }

  }
})