import { NextRequest, NextResponse } from 'next/server' import fs from 'fs' import path from 'path' const DATA_DIR = process.env.NODE_ENV === 'production' && fs.existsSync('/data') ? '/data' : path.join(process.cwd(), 'data') const FLUTTER_APPS_DIR = path.join(DATA_DIR, 'documents', 'flutter_apps') // Ensure directory exists if (!fs.existsSync(FLUTTER_APPS_DIR)) { fs.mkdirSync(FLUTTER_APPS_DIR, { recursive: true }) } export async function POST(request: NextRequest) { try { const body = await request.json() const { name, dartCode, dependencies = [], pubspecYaml } = body if (!name || !dartCode) { return NextResponse.json( { success: false, error: 'Name and dartCode are required' }, { status: 400 } ) } // Sanitize name const safeName = name.replace(/[^a-zA-Z0-9_-]/g, '_').toLowerCase() if (!safeName) { return NextResponse.json( { success: false, error: 'Invalid app name' }, { status: 400 } ) } // Generate default pubspec.yaml if not provided let finalPubspecYaml = pubspecYaml if (!finalPubspecYaml) { const depLines = dependencies.map((dep: string) => ` ${dep}`).join('\n') finalPubspecYaml = `name: ${safeName} description: A Flutter application created via Reuben OS version: 1.0.0 environment: sdk: '>=3.0.0 <4.0.0' dependencies: flutter: sdk: flutter ${depLines} flutter: uses-material-design: true ` } // Create Flutter app object const flutterApp = { type: 'flutter_app', name: safeName, dartCode, dependencies, pubspecYaml: finalPubspecYaml, metadata: { created: new Date().toISOString(), modified: new Date().toISOString(), author: 'claude' } } // Save to file const fileName = `${safeName}.flutter.json` const filePath = path.join(FLUTTER_APPS_DIR, fileName) // Check if file exists if (fs.existsSync(filePath)) { return NextResponse.json( { success: false, error: `Flutter app '${safeName}' already exists. Use update instead.` }, { status: 400 } ) } fs.writeFileSync(filePath, JSON.stringify(flutterApp, null, 2), 'utf-8') return NextResponse.json({ success: true, appName: safeName, fileName, filePath: `flutter_apps/${fileName}`, dependencies, message: 'Flutter app created successfully' }) } catch (error) { console.error('Error creating Flutter app:', error) return NextResponse.json( { success: false, error: 'Failed to create Flutter app' }, { status: 500 } ) } }