import { Head } from "$fresh/runtime.ts";
import { HandlerContext, Handlers, PageProps } from "$fresh/server.ts";
import DocSearch from "../../islands/DocSearch.tsx";
import { Doc } from "../../src/collect.ts";
import { docCollector } from "../../src/store/doc.ts";

async function GET(req: Request, ctx: HandlerContext): Promise<Response> {
  const authRequired = Deno.env.get("AUTH_REQUIRED") === "true";
  if (authRequired) {
    const login = ctx.state["login"];
    if (!login) {
      return new Response(null, {
        status: 302,
        headers: {
          "Location": "/login",
          "content-type": "text/plain",
          "Access-Control-Allow-Origin": "*",
          "Access-Control-Allow-Methods": "GET,HEAD,PUT,PATCH,POST,DELETE",
          "Access-Control-Allow-Headers":
            "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With",
        },
      });
    }
  }
  const docs = docCollector.getDocs();
  return await ctx.render({ docs });
}

export const handler: Handlers = {
  GET,
};

export default function Docs(props: PageProps<{ docs: Doc[] }>) {
  const { docs } = props.data;
  return (
    <>
      <Head>
        <title>Simple file server - Doc</title>
      </Head>
      <div class="p-4 mx-auto max-w-screen-md">
        <DocSearch docs={docs}></DocSearch>
      </div>
    </>
  );
}
