import 'package:flutter/material.dart'; import 'package:flutter_lucide/flutter_lucide.dart'; import '../../core/theme/app_colors.dart'; import '../../core/theme/app_spacing.dart'; import '../../core/theme/app_typography.dart'; import '../../shared/widgets/top_nav_bar.dart'; /// Generate Video screen - matches Pencil mmLB5 class GenerateVideoScreen extends StatelessWidget { const GenerateVideoScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.background, appBar: PreferredSize( preferredSize: const Size.fromHeight(56), child: TopNavBar( title: 'Generate Video', showBackButton: true, onBack: () => Navigator.of(context).pop(), ), ), body: SingleChildScrollView( padding: const EdgeInsets.all(AppSpacing.screenPaddingLarge), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ _CreditsCard(credits: '1,280'), const SizedBox(height: AppSpacing.xxl), _UploadArea(onUpload: () {}), const SizedBox(height: AppSpacing.xxl), _GenerateButton( onGenerate: () => Navigator.of(context).pushReplacementNamed('/progress'), ), ], ), ), ); } } class _CreditsCard extends StatelessWidget { const _CreditsCard({required this.credits}); final String credits; @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.symmetric( horizontal: AppSpacing.xxl, vertical: AppSpacing.xl, ), decoration: BoxDecoration( color: AppColors.primary, borderRadius: BorderRadius.circular(16), border: Border.all( color: AppColors.primary.withValues(alpha: 0.5), ), boxShadow: [ BoxShadow( color: AppColors.primaryShadow.withValues(alpha: 0.25), blurRadius: 8, offset: const Offset(0, 2), ), ], ), child: Row( children: [ Icon(LucideIcons.sparkles, size: 28, color: AppColors.surface), const SizedBox(width: AppSpacing.md), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Available Credits', style: AppTypography.bodyRegular.copyWith( color: AppColors.surface.withValues(alpha: 0.8), ), ), Text( credits, style: AppTypography.bodyLarge.copyWith( fontSize: 32, fontWeight: FontWeight.w700, color: AppColors.surface, ), ), ], ), ], ), ); } } class _UploadArea extends StatelessWidget { const _UploadArea({required this.onUpload}); final VoidCallback onUpload; @override Widget build(BuildContext context) { return GestureDetector( onTap: onUpload, child: Container( height: 280, decoration: BoxDecoration( color: AppColors.surfaceAlt, borderRadius: BorderRadius.circular(16), border: Border.all( color: AppColors.border, width: 2, ), ), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( LucideIcons.image_plus, size: 48, color: AppColors.textMuted, ), const SizedBox(height: AppSpacing.lg), SizedBox( width: 280, child: Text( 'Please upload an image as the base for generation', textAlign: TextAlign.center, style: AppTypography.bodyRegular.copyWith( color: AppColors.textSecondary, ), ), ), ], ), ), ); } } class _GenerateButton extends StatelessWidget { const _GenerateButton({required this.onGenerate}); final VoidCallback onGenerate; @override Widget build(BuildContext context) { return GestureDetector( onTap: onGenerate, child: Container( height: 56, decoration: BoxDecoration( color: AppColors.primary, borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: AppColors.primaryShadow.withValues(alpha: 0.25), blurRadius: 8, offset: const Offset(0, 2), ), ], ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'Generate Video', style: AppTypography.bodyMedium.copyWith( color: AppColors.surface, ), ), const SizedBox(width: AppSpacing.md), Container( padding: const EdgeInsets.symmetric( horizontal: 10, vertical: AppSpacing.xs, ), decoration: BoxDecoration( color: AppColors.surface.withValues(alpha: 0.2), borderRadius: BorderRadius.circular(8), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon( LucideIcons.sparkles, size: 16, color: AppColors.surface, ), const SizedBox(width: AppSpacing.xs), Text( '50', style: AppTypography.bodyRegular.copyWith( color: AppColors.surface, fontWeight: FontWeight.w600, ), ), ], ), ), ], ), ), ); } }