"use client";
import React, { useEffect, useState } from "react";
import { useRouter } from "next/navigation";
import dynamic from "next/dynamic";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { useToast } from "@/components/ui/use-toast";

const MarkdownEditor = dynamic(() => import("@uiw/react-md-editor"), {
	ssr: false,
});

const EditPage = ({ params }: { params: { slug: string } }) => {
	const router = useRouter();
	const { slug } = params;
	const { toast } = useToast();
	const [title, setTitle] = useState("");
	const [content, setContent] = useState("");
	const [loading, setLoading] = useState(false);

	useEffect(() => {
		if (slug) {
			fetch(`/api/mdx/pages/${slug}`)
				.then((response) => response.json())
				.then((data) => {
					setTitle(data.title);
					setContent(data.content);
				})
				.catch((error) => console.error("Failed to load page", error));
		}
	}, [slug]);

	const savePage = async () => {
		setLoading(true);
		const response = await fetch(`/api/mdx/pages/${slug}`, {
			method: "PUT",
			headers: { "Content-Type": "application/json" },
			body: JSON.stringify({ title, content }),
		});

		if (response.ok) {
			setLoading(false);
			toast({ description: "Page successfully updated" });
			router.push(`/admin/multi-logs/`);
		} else {
			setLoading(false);
			// TEMPERARORY ERROR
			router.push(`/admin/multi-logs/`);
			toast({ description: "Updated but cant return data" });
		}
	};

	const handleEditorChange = (value?: string) => {
		if (value !== undefined) {
			setContent(value);
		}
	};

	return (
		<section id="edit-page" className="wrapper container">
			<h1 className="text-3xl font-bold py-6">Edit Page: {slug}</h1>
			<Input
				value={title}
				onChange={(e) => setTitle(e.target.value)}
				placeholder="Page Title"
			/>
			<MarkdownEditor
				value={content}
				onChange={handleEditorChange}
				height={560}
			/>
			<Button onClick={savePage} disabled={loading} className="mt-4">
				Save
			</Button>
		</section>
	);
};

export default EditPage;