import { z } from "zod";

import { pageSchema } from "../../entities/models/page";
import type { IPagesRepository } from "../repositories/pages.repository.interface";

// ── Input ────────────────────────────────────────────────────────────────
export const getPageBySlugInputSchema = z.object({ slug: z.string().min(1) }).strict();
export type GetPageBySlugInput = z.infer<typeof getPageBySlugInputSchema>;

// ── Output ───────────────────────────────────────────────────────────────
export const getPageBySlugOutputSchema = pageSchema;
export type GetPageBySlugOutput = z.infer<typeof getPageBySlugOutputSchema>;

// ── Use case ─────────────────────────────────────────────────────────────
export type IGetPageBySlugUseCase = ReturnType<typeof getPageBySlugUseCase>;

export const getPageBySlugUseCase =
  (pagesRepository: IPagesRepository) =>
  async (input: GetPageBySlugInput): Promise<GetPageBySlugOutput | undefined> => {
    const page = await pagesRepository.getPageBySlug(input.slug);
    if (!page) return undefined;
    return getPageBySlugOutputSchema.parse(page);
  };
