import { Handlers, RouteConfig } from '$fresh/server.ts'

import { contentType } from '$std/media_types/mod.ts'
import { parse } from '$std/path/mod.ts'

const db = [
	'julien.oculi',
]

async function getPortfolio(
	user: string,
	pathname: string,
): Promise<Response> {
	const url = new URL(
		pathname,
		`https://git.cohabit.fr/${user}/.portfolio/raw/branch/main/`,
	)

	const { ext } = parse(pathname)

	try {
		const response = await fetch(url)
		if (response.ok) {
			return new Response(response.body, {
				headers: {
					'Content-Type': contentType(ext) ?? 'text/plain; charset=utf-8',
				},
			})
		}
		throw new Error(response.statusText)
	} catch (error) {
		return new Response(
			'Portfolio introuvable\n```js\n' + String(error) + '\n```',
		)
	}
}

export const config: RouteConfig = {
	skipAppWrapper: true,
}

export const handler: Handlers = {
	GET(req, _ctx) {
		const url = new URL(req.url)
		const id = Number(url.pathname.split('/')[2])
		const user = db[id]
		const query = url.pathname.split('/').slice(4).join('/')
		return getPortfolio(user, query === '' ? 'index.html' : query)
	},
}
