import { Prisma } from '@/generated/prisma/client';

/**
 * Tipo base para Documentos - compatible con Prisma
 */
export interface Document {
  id: string;
  fileName: string;
  fileUrl: string;
  extractedData: Prisma.JsonValue;
  ownerId: string;
  categoryId: string | null;
  createdAt: Date;
  updatedAt: Date;
  owner: {
    id: string;
    name: string | null;
    username: string;
  };
  category?: {
    id: string;
    name: string;
    icon: string | null;
    color: string | null;
    expenseType?: string | null;
    paymentMethod?: string | null;
  } | null;
}

/**
 * Alias para compatibilidad con código existente
 */
export type Documento = Document;

/**
 * Documento con URL local para el frontend
 */
export interface DocumentWithLocalUrl extends Document {
  fileUrl: string; // /api/files/[filename]
}

/**
 * Filtros para búsqueda de documentos
 */
export interface DocumentFilters {
  query?: string;
  ownerId?: string;
  categoryId?: string;
  userId?: string;
  role?: 'USER' | 'ADMIN';
}

/**
 * Datos para crear un documento
 */
export interface CreateDocumentInput {
  fileName: string;
  fileData: string; // Base64
  mimeType: string;
  extractedData: Record<string, unknown>;
  ownerId: string;
  categoryId?: string;
}

/**
 * Datos para actualizar un documento
 */
export interface UpdateDocumentInput {
  extractedData?: Record<string, unknown>;
  categoryId?: string;
}

/**
 * Resultado de operación con documentos
 */
export interface DocumentOperationResult {
  success: boolean;
  error?: string;
  documentId?: string;
  count?: number;
}
