import type { Category, Post } from "@prisma/client";
import { AdminAutoTextarea } from "@/admin/components/AdminAutoTextarea";
import { AdminFormField, AdminFormSection } from "@/admin/components/AdminFormField";
import { savePostAction } from "@/lib/actions";

export function PostForm({
  categories,
  post
}: {
  categories: Category[];
  post?: Post | null;
}) {
  return (
    <form action={savePostAction} className="admin-form glass-panel form-grid">
      {post ? <input name="id" type="hidden" value={post.id} /> : null}

      <AdminFormSection title="Article details" />

      <AdminFormField label="Title">
        <input
          className="admin-form-control"
          defaultValue={post?.title}
          name="title"
          placeholder="Enter article title"
          required
        />
      </AdminFormField>

      <AdminFormField hint="Brief summary for cards and search previews." label="Excerpt">
        <AdminAutoTextarea
          defaultValue={post?.excerpt}
          name="excerpt"
          placeholder="Write a short excerpt"
          required
          variant="compact"
        />
      </AdminFormField>

      <AdminFormField
        hint="Main article body. This field starts with more space for longer writing."
        label="Content"
        span="full"
      >
        <AdminAutoTextarea
          defaultValue={post?.content}
          name="content"
          placeholder="Write the full article content"
          required
          variant="description"
        />
      </AdminFormField>

      <AdminFormSection title="SEO settings" />

      <AdminFormField label="SEO title">
        <input
          className="admin-form-control"
          defaultValue={post?.seoTitle ?? ""}
          name="seoTitle"
          placeholder="Optional — defaults to article title"
        />
      </AdminFormField>

      <AdminFormField label="SEO description">
        <AdminAutoTextarea
          defaultValue={post?.seoDescription ?? ""}
          name="seoDescription"
          placeholder="Optional search description"
          variant="compact"
        />
      </AdminFormField>

      <AdminFormField label="SEO keywords">
        <input
          className="admin-form-control"
          defaultValue={post?.seoKeywords ?? ""}
          name="seoKeywords"
          placeholder="Nepal travel, culture, food"
        />
      </AdminFormField>

      <AdminFormSection title="Thumbnail" />

      <AdminFormField label="Cover image URL">
        <input
          className="admin-form-control"
          defaultValue={post?.coverImage ?? ""}
          name="coverImage"
          placeholder="/uploads/blog.jpg or https://..."
        />
      </AdminFormField>

      <AdminFormField hint="Shown on blog cards and the article page." label="Upload cover image">
        <input className="admin-form-control" name="coverImageFile" type="file" />
      </AdminFormField>

      <AdminFormSection title="Publishing" />

      <AdminFormField label="Category">
        <select className="admin-form-control" defaultValue={post?.categoryId ?? ""} name="categoryId">
          <option value="">No category</option>
          {categories.map((category) => (
            <option key={category.id} value={category.id}>
              {category.name}
            </option>
          ))}
        </select>
      </AdminFormField>

      <AdminFormField label="Status">
        <select className="admin-form-control" defaultValue={post?.status ?? "DRAFT"} name="status">
          <option value="DRAFT">Draft</option>
          <option value="PUBLISHED">Published</option>
        </select>
      </AdminFormField>

      <label className="checklist-item active">
        <input defaultChecked={post?.featured ?? false} name="featured" type="checkbox" />
        Featured article
      </label>

      <button className="btn" type="submit">
        Save article
      </button>
    </form>
  );
}
