import Fastify from 'fastify'
import cors from '@fastify/cors'

import process from 'node:process'

import { getRessources, transformRessources } from '../src/ressources'
import { getContent } from '../src/tree'

const fastify = Fastify({
  logger: true,
})

// eslint-disable-next-line @typescript-eslint/no-unused-vars
fastify.register(cors, (_instance) => {
  return (req, callback) => {
    const corsOptions = {
      origin: true,
    }

    if (/^localhost$/m.test(req.headers.origin)) {
      corsOptions.origin = false
    }

    callback(null, corsOptions)
  }
})

fastify.get('/api/ressources', async (_request, reply) => {
  const rawRessources = getRessources()
  const ressources = transformRessources(rawRessources)

  reply.send({ ressources })
})

fastify.get('/api/file/*', async (request, reply) => {
  // @ts-ignore
  const { '*': name } = request.params
  const content = await getContent(name)

  reply.send({ content })
})

fastify.listen({ port: 2000 }, function (err, address) {
  if (err) {
    fastify.log.error(err)
    process.exit(1)
  }

  console.log(`Server is now listening on ${address}`)
})