import { publicProcedure } from "../_core/trpc.ts";
import { z } from "zod";
import { generateCertificate } from "../_core/certificateGenerator.ts";

/**
 * Download certificate as PDF
 * Returns base64 encoded PDF for client-side download
 */
export const downloadCertificateProcedure = publicProcedure
  .input(
    z.object({
      certificationId: z.string(),
      adminName: z.string(),
      certificationNumber: z.string().optional(),
      issueDate: z.date().optional(),
      expirationDate: z.date().optional(),
    })
  )
  .mutation(async ({ input }) => {
    try {
      // Generate certificate PDF
      const pdfBuffer = await generateCertificate({
        adminName: input.adminName,
        certificationName: "CoinKrazy Admin Certification",
        certificationNumber: input.certificationNumber || `CERT-${Date.now()}`,
        issueDate: input.issueDate || new Date(),
        expirationDate: input.expirationDate || new Date(Date.now() + 365 * 24 * 60 * 60 * 1000),
        organizationName: "CoinKrazy.com",
        verificationUrl: `https://playplaycoinkrazy.com/verify-certificate/${input.certificationId}`,
      });

      // Convert buffer to base64
      const certificateBase64 = pdfBuffer.toString("base64");

      return {
        success: true,
        certificateBase64,
        filename: `certificate-${input.adminName.replace(/\s+/g, "-")}-${Date.now()}.pdf`,
        mimeType: "application/pdf",
      };
    } catch (error) {
      console.error("Certificate generation failed:", error);
      throw new Error(`Failed to generate certificate: ${error instanceof Error ? error.message : "Unknown error"}`);
    }
  });

/**
 * Get certificate details
 */
export const getCertificateDetailsProcedure = publicProcedure
  .input(
    z.object({
      certificationId: z.string(),
    })
  )
  .query(async ({ input }) => {
    // Placeholder - in production, fetch from database
    return {
      id: input.certificationId,
      title: "Admin Certification",
      level: "advanced",
      description: "Complete admin training certification",
      issuedDate: new Date(),
      expirationDate: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000),
      verificationUrl: `https://playplaycoinkrazy.com/verify-certificate/${input.certificationId}`,
    };
  });

/**
 * Verify certificate by ID
 */
export const verifyCertificateProcedure = publicProcedure
  .input(
    z.object({
      certificationId: z.string(),
    })
  )
  .query(async ({ input }) => {
    // Placeholder - in production, verify against database
    return {
      valid: true,
      certificationId: input.certificationId,
      adminName: "Admin User",
      certificationTitle: "Admin Certification",
      issuedDate: new Date(),
      expirationDate: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000),
      isExpired: false,
    };
  });
