import express from 'express'; import { generateCompletion } from '../ai_engine.js'; import { supabase } from '../config/supabaseClient.js'; import fetch from 'node-fetch'; const router = express.Router(); const FASTAPI_URL = process.env.FASTAPI_SERVER_URL || 'http://localhost:8000'; router.get('/trending', async (req, res) => { try { const { data, error } = await supabase.from('viral_cat_trending').select('*').order('created_at', { ascending: false }); if (error) throw error; res.json({ success: true, data }); } catch (err) { res.status(500).json({ success: false, error: err.message }); } }); router.post('/admin/template', async (req, res) => { try { const { title, video_url, platform, video_base64 } = req.body; const mediaRes = await fetch(`${FASTAPI_URL}/process-video`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ video_base64 }) }); const mediaData = await mediaRes.json(); console.log(mediaData); if (!mediaData.success) throw new Error(mediaData.error); const aiPrompt = `Analyze this video transcript and these 15 frames. TRANSCRIPT: "${mediaData.transcript}" Format: TRANSCRIPT:[text], ENVIRONMENT:[text], PACING:[text]`; const aiResult = await generateCompletion({ model: "maverick", prompt: aiPrompt, images: mediaData.frames }); console.log(aiResult); const transcriptMatch = aiResult.data.match(/TRANSCRIPT:\s*(.*?)(?=ENVIRONMENT:)/is); const envMatch = aiResult.data.match(/ENVIRONMENT:\s*(.*?)(?=PACING:)/is); const pacingMatch = aiResult.data.match(/PACING:\s*(.*)/is); const { error } = await supabase.from('viral_cat_trending').insert([{ platform, video_url, title, thumbnail_url: `data:image/jpeg;base64,${mediaData.thumbnail}`, transcript: transcriptMatch ? transcriptMatch[1].trim() : mediaData.transcript, ai_environment_data: envMatch ? envMatch[1].trim() : "N/A", ai_scene_changes: pacingMatch ? pacingMatch[1].trim() : "N/A", }]); if (error) throw error; res.json({ success: true }); } catch (err) { res.status(500).json({ success: false, error: err.message }); } }); router.post('/custom_remix', async (req, res) => { try { const { user_niche, video_base64 } = req.body; const mediaRes = await fetch(`${FASTAPI_URL}/process-video`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ video_base64 }) }); const mediaData = await mediaRes.json(); if (!mediaData.success) throw new Error(mediaData.error); const result = await generateCompletion({ model: "maverick", prompt: `Remix for niche: "${user_niche}". Transcript: ${mediaData.transcript}`, images: mediaData.frames }); res.json(result); } catch (err) { res.status(500).json({ success: false, error: err.message }); } }); router.delete('/admin/template/:id', async (req, res) => { await supabase.from('viral_cat_trending').delete().eq('id', req.params.id); res.json({ success: true }); }); router.get('/admin', (req, res) => { res.send(`