import type { NextApiRequest, NextApiResponse } from "next" import { db, schema } from '../../../lib/db/connection' import { eq, desc } from 'drizzle-orm' export default async function handler(req: NextApiRequest, res: NextApiResponse) { if (req.method === "GET") { const { format = 'json', type = 'sources' } = req.query try { let data: any[] = [] let filename = "" if (type === 'sources') { data = await db.select({ domain: schema.sources.domain, risk_level: schema.sources.riskLevel, status: schema.sources.status, created_at: schema.sources.createdAt }) .from(schema.sources) .where(eq(schema.sources.status, 'verified')) .orderBy(desc(schema.sources.riskLevel)) filename = `sources_export_${Date.now()}.${format}` } else if (type === 'reports') { data = await db.select({ source_url: schema.reports.sourceUrl, status: schema.reports.status, description: schema.reports.description, created_at: schema.reports.createdAt }) .from(schema.reports) .orderBy(desc(schema.reports.createdAt)) filename = `reports_export_${Date.now()}.${format}` } if (format === 'csv') { // Convert to CSV if (data.length === 0) { return res.status(200).send('') } const headers = Object.keys(data[0]).join(',') const csvRows = data.map(row => Object.values(row).map(value => typeof value === 'string' && value.includes(',') ? `"${value.replace(/"/g, '""')}"` : value ).join(',') ) const csvContent = [headers, ...csvRows].join('\n') res.setHeader('Content-Type', 'text/csv') res.setHeader('Content-Disposition', `attachment; filename="${filename}"`) res.send(csvContent) } else { // JSON format res.setHeader('Content-Type', 'application/json') res.setHeader('Content-Disposition', `attachment; filename="${filename}"`) res.json({ exported_at: new Date().toISOString(), count: data.length, data }) } } catch (error) { console.error('Export error:', error) res.status(500).json({ error: "Export failed" }) } } else if (req.method === "POST") { // Handle export job creation const { type, format, dateRange, filters } = req.body // Create mock export job const job = { id: Date.now().toString(), name: `Export ${type} as ${format}`, type, format, status: 'completed', created_at: new Date().toISOString(), download_url: `/api/admin/export?type=${type}&format=${format}`, file_size: '2.4 MB', records_count: 150 } res.json(job) } else { res.status(405).json({ error: "Method not allowed" }) } }