import { Params, RequestModel } from "./models/abstractions"




interface FetchData {
  status: number,
  text: string
}

const Post = () => {

}

const Get = async <T>(apiUrl: string, pathParams?: Params, searchParams?: Params): Promise<T | null> => {
  const url = new URL(apiUrl)

  if(pathParams) {
    Object.keys(pathParams).forEach(key => {
      if (typeof(pathParams[key]) !== undefined) {
        url.pathname += `/${pathParams[key]}`
      }
    })
  }

  if(searchParams) {
    Object.keys(searchParams).forEach(key => {
      if (typeof(searchParams[key]) !== undefined) {
        url.searchParams.append(key, searchParams[key] as string)
      }
    })
  }

  const requestParams = {
    method: 'GET',
    headers: { 'accept': 'application/json', 'content-type': 'application/json' },
  }

  const fetchData = await fetch(url.toString(), requestParams)
    .then(async fetchData => {
      return {
        status: fetchData.status,
        text: await fetchData.text()
      }
    })
    .catch(err => {
      console.log(err)
    })

  if (fetchData?.text)
    return JSON.parse((fetchData as FetchData).text) as T
  
  return null
}

const Put = () => {

}

const Delete = () => {

}

export {
  Post,
  Get,
  Put,
  Delete
}



