import { z } from 'zod';
import * as purchaseQueries from '@/server/db/queries/purchases.js';
import type { SupportTool, ToolResult } from './_types.js';
import type { AgentDeps } from '../types.js';

const inputSchema = z.object({ purchaseId: z.uuid() });

type Output = { purchaseId: string; redemptionStatus: string; redeemedAt: string | null };

async function impl(deps: AgentDeps, rawInput: unknown): Promise<ToolResult<Output>> {
  const parsed = inputSchema.safeParse(rawInput);
  if (!parsed.success) return { ok: false, error: `INVALID_INPUT:${parsed.error.message}` };

  const purchase = await purchaseQueries.findById(deps.db, parsed.data.purchaseId);
  if (!purchase) return { ok: false, error: 'NOT_FOUND:purchase' };
  if (purchase.vouchers.length === 0) return { ok: false, error: 'NOT_FOUND:voucher' };

  return {
    ok: true,
    data: {
      purchaseId: purchase.id,
      redemptionStatus: purchase.redemptionStatus,
      redeemedAt: purchase.redeemedAt?.toISOString() ?? null,
    },
  };
}

export const getRedemptionLogTool = {
  name: 'get_redemption_log',
  inputSchema,
  impl,
} satisfies SupportTool<'get_redemption_log', z.infer<typeof inputSchema>, Output>;
