import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';

// Full redesign note:
// - We keep the existing accessibility intent (larger sizes) but align visuals to a cohesive Material 3 scheme.

class AppTheme {
  // ACCESSIBILITY: Larger font size multiplier for elderly users (50+)
  static const double fontSizeMultiplier = 1.3; // 30% larger fonts
  
  // Brand seed (used to generate cohesive ColorScheme)
  static const Color seed = Color(0xFF0F766E); // teal (trust + finance)
  static const Color accent = Color(0xFFF59E0B); // amber (celebratory, draws)

  static ColorScheme _lightScheme() {
    return ColorScheme.fromSeed(
      seedColor: seed,
      brightness: Brightness.light,
    ).copyWith(
      tertiary: accent,
    );
  }

  static ColorScheme _darkScheme() {
    return ColorScheme.fromSeed(
      seedColor: seed,
      brightness: Brightness.dark,
    ).copyWith(
      tertiary: accent,
    );
  }

  static TextTheme _textTheme(ColorScheme scheme) {
    // Use a tighter, modern scale; keep multiplier to respect original accessibility intent.
    return TextTheme(
      displaySmall: TextStyle(
        fontSize: 34.sp * fontSizeMultiplier,
        fontWeight: FontWeight.w700,
        letterSpacing: -0.5,
        color: scheme.onSurface,
      ),
      headlineSmall: TextStyle(
        fontSize: 22.sp * fontSizeMultiplier,
        fontWeight: FontWeight.w700,
        letterSpacing: -0.2,
        color: scheme.onSurface,
      ),
      titleLarge: TextStyle(
        fontSize: 18.sp * fontSizeMultiplier,
        fontWeight: FontWeight.w700,
        color: scheme.onSurface,
      ),
      titleMedium: TextStyle(
        fontSize: 16.sp * fontSizeMultiplier,
        fontWeight: FontWeight.w600,
        color: scheme.onSurface,
      ),
      bodyLarge: TextStyle(
        fontSize: 15.sp * fontSizeMultiplier,
        fontWeight: FontWeight.w500,
        height: 1.35,
        color: scheme.onSurface,
      ),
      bodyMedium: TextStyle(
        fontSize: 13.sp * fontSizeMultiplier,
        fontWeight: FontWeight.w500,
        height: 1.35,
        color: scheme.onSurfaceVariant,
      ),
      labelLarge: TextStyle(
        fontSize: 13.sp * fontSizeMultiplier,
        fontWeight: FontWeight.w600,
        letterSpacing: 0.3,
        color: scheme.onSurface,
      ),
    );
  }

  /// Light Theme
  static ThemeData get lightTheme {
    final scheme = _lightScheme();
    return ThemeData(
      useMaterial3: true,
      brightness: Brightness.light,
      colorScheme: scheme,
      scaffoldBackgroundColor: scheme.surface,
      textTheme: _textTheme(scheme),
      
      // AppBar Theme - Accessibility Enhanced
      appBarTheme: AppBarTheme(
        elevation: 0,
        centerTitle: false,
        backgroundColor: scheme.surface,
        foregroundColor: scheme.onSurface,
        titleTextStyle: _textTheme(scheme).titleLarge,
        iconTheme: IconThemeData(
          color: scheme.onSurface,
          size: (24.w * fontSizeMultiplier),
        ),
      ),

      cardTheme: CardTheme(
        elevation: 0,
        color: scheme.surfaceContainerHighest,
        shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18.r)),
        margin: EdgeInsets.zero,
      ),

      // Elevated Button Theme - Accessibility Enhanced
      elevatedButtonTheme: ElevatedButtonThemeData(
        style: ElevatedButton.styleFrom(
          backgroundColor: scheme.primary,
          foregroundColor: scheme.onPrimary,
          elevation: 0,
          padding: EdgeInsets.symmetric(
            horizontal: (20.w * fontSizeMultiplier),
            vertical: (14.h * fontSizeMultiplier),
          ),
          minimumSize: Size(0, (48.h * fontSizeMultiplier)),
          textStyle: _textTheme(scheme).labelLarge,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(16.r),
          ),
        ),
      ),

      // Outlined Button Theme - Accessibility Enhanced
      outlinedButtonTheme: OutlinedButtonThemeData(
        style: OutlinedButton.styleFrom(
          foregroundColor: scheme.primary,
          side: BorderSide(color: scheme.outline, width: 1.2),
          padding: EdgeInsets.symmetric(
            horizontal: (20.w * fontSizeMultiplier),
            vertical: (14.h * fontSizeMultiplier),
          ),
          minimumSize: Size(0, (48.h * fontSizeMultiplier)),
          textStyle: _textTheme(scheme).labelLarge,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(16.r),
          ),
        ),
      ),

      // Text Button Theme - Accessibility Enhanced
      textButtonTheme: TextButtonThemeData(
        style: TextButton.styleFrom(
          foregroundColor: scheme.primary,
          padding: EdgeInsets.symmetric(
            horizontal: (16.w * fontSizeMultiplier),
            vertical: (12.h * fontSizeMultiplier),
          ),
          minimumSize: Size(0, (44.h * fontSizeMultiplier)),
          textStyle: _textTheme(scheme).labelLarge,
        ),
      ),

      // Input Decoration Theme - Accessibility Enhanced
      inputDecorationTheme: InputDecorationTheme(
        filled: true,
        fillColor: scheme.surfaceContainerHighest,
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(16.r),
          borderSide: BorderSide(color: scheme.outlineVariant),
        ),
        enabledBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(16.r),
          borderSide: BorderSide(color: scheme.outlineVariant),
        ),
        focusedBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(16.r),
          borderSide: BorderSide(color: scheme.primary, width: 2),
        ),
        errorBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(16.r),
          borderSide: BorderSide(color: scheme.error, width: 2),
        ),
        contentPadding: EdgeInsets.symmetric(
          horizontal: (16.w * fontSizeMultiplier),
          vertical: (14.h * fontSizeMultiplier),
        ),
        labelStyle: _textTheme(scheme).bodyMedium,
        hintStyle: _textTheme(scheme).bodyMedium,
      ),

      // Icon Theme - Accessibility Enhanced
      iconTheme: IconThemeData(
        color: scheme.onSurfaceVariant,
        size: (24.w * fontSizeMultiplier),
      ),

      // Floating Action Button Theme
      floatingActionButtonTheme: FloatingActionButtonThemeData(
        backgroundColor: scheme.primary,
        foregroundColor: scheme.onPrimary,
        elevation: 0,
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(16.r),
        ),
      ),

      // Bottom Navigation Bar Theme - Accessibility Enhanced
      bottomNavigationBarTheme: BottomNavigationBarThemeData(
        backgroundColor: scheme.surface,
        selectedItemColor: scheme.primary,
        unselectedItemColor: scheme.onSurfaceVariant,
        selectedLabelStyle: _textTheme(scheme).labelLarge,
        unselectedLabelStyle: _textTheme(scheme).labelLarge!.copyWith(
          color: scheme.onSurfaceVariant,
          fontWeight: FontWeight.w600,
        ),
        selectedIconTheme: IconThemeData(
          size: (28.w * fontSizeMultiplier),
        ),
        unselectedIconTheme: IconThemeData(
          size: (24.w * fontSizeMultiplier),
        ),
        type: BottomNavigationBarType.fixed,
        elevation: 0,
      ),

      // Divider Theme - Accessibility Enhanced
      dividerTheme: DividerThemeData(
        color: scheme.outlineVariant,
        thickness: 1,
        space: 1,
      ),

      // Chip Theme - Accessibility Enhanced
      chipTheme: ChipThemeData(
        backgroundColor: scheme.surfaceContainerHighest,
        selectedColor: scheme.primaryContainer,
        labelStyle: _textTheme(scheme).labelLarge,
        padding: EdgeInsets.symmetric(
          horizontal: (14.w * fontSizeMultiplier),
          vertical: (10.h * fontSizeMultiplier),
        ),
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(20.r),
        ),
      ),

      // Dialog Theme - Accessibility Enhanced
      // dialogTheme: DialogThemeData(
      //   elevation: 8, // More elevation for better depth
      //   shape: RoundedRectangleBorder(
      //     borderRadius: BorderRadius.circular(20.r),
      //   ),
      //   titleTextStyle: TextStyle(
      //     fontSize: (22.sp * fontSizeMultiplier), // Larger titles
      //     fontWeight: FontWeight.bold,
      //     color: lightTextPrimary,
      //   ),
      //   contentTextStyle: TextStyle(
      //     fontSize: (17.sp * fontSizeMultiplier), // Larger content
      //     color: lightTextSecondary,
      //     height: 1.5, // Better line spacing
      //   ),
      // ),

      // Snackbar Theme - Accessibility Enhanced
      snackBarTheme: SnackBarThemeData(
        backgroundColor: scheme.inverseSurface,
        contentTextStyle: _textTheme(scheme).bodyMedium!.copyWith(
          color: scheme.onInverseSurface,
          fontWeight: FontWeight.w600,
        ),
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(16.r),
        ),
        behavior: SnackBarBehavior.floating,
        actionTextColor: scheme.tertiary,
      ),
    );
  }

  /// Dark Theme
  static ThemeData get darkTheme {
    final scheme = _darkScheme();
    return ThemeData(
      useMaterial3: true,
      brightness: Brightness.dark,
      colorScheme: scheme,
      scaffoldBackgroundColor: scheme.surface,
      textTheme: _textTheme(scheme),
      
      // AppBar Theme - Accessibility Enhanced
      appBarTheme: AppBarTheme(
        elevation: 0,
        centerTitle: false,
        backgroundColor: scheme.surface,
        foregroundColor: scheme.onSurface,
        titleTextStyle: _textTheme(scheme).titleLarge,
        iconTheme: IconThemeData(
          color: scheme.onSurface,
          size: (24.w * fontSizeMultiplier),
        ),
      ),

      cardTheme: CardTheme(
        elevation: 0,
        color: scheme.surfaceContainerHighest,
        shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18.r)),
        margin: EdgeInsets.zero,
      ),

      // Elevated Button Theme - Accessibility Enhanced
      elevatedButtonTheme: ElevatedButtonThemeData(
        style: ElevatedButton.styleFrom(
          backgroundColor: scheme.primary,
          foregroundColor: scheme.onPrimary,
          elevation: 0,
          padding: EdgeInsets.symmetric(
            horizontal: (20.w * fontSizeMultiplier),
            vertical: (14.h * fontSizeMultiplier),
          ),
          minimumSize: Size(0, (48.h * fontSizeMultiplier)),
          textStyle: _textTheme(scheme).labelLarge,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(16.r),
          ),
        ),
      ),

      // Outlined Button Theme - Accessibility Enhanced
      outlinedButtonTheme: OutlinedButtonThemeData(
        style: OutlinedButton.styleFrom(
          foregroundColor: scheme.primary,
          side: BorderSide(color: scheme.outline, width: 1.2),
          padding: EdgeInsets.symmetric(
            horizontal: (20.w * fontSizeMultiplier),
            vertical: (14.h * fontSizeMultiplier),
          ),
          minimumSize: Size(0, (48.h * fontSizeMultiplier)),
          textStyle: _textTheme(scheme).labelLarge,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(16.r),
          ),
        ),
      ),

      // Text Button Theme
      textButtonTheme: TextButtonThemeData(
        style: TextButton.styleFrom(
          foregroundColor: scheme.primary,
          padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 10.h),
          textStyle: _textTheme(scheme).labelLarge,
        ),
      ),

      // Input Decoration Theme
      inputDecorationTheme: InputDecorationTheme(
        filled: true,
        fillColor: scheme.surfaceContainerHighest,
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(16.r),
          borderSide: BorderSide(color: scheme.outlineVariant),
        ),
        enabledBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(16.r),
          borderSide: BorderSide(color: scheme.outlineVariant),
        ),
        focusedBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(16.r),
          borderSide: BorderSide(color: scheme.primary, width: 2),
        ),
        errorBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(16.r),
          borderSide: BorderSide(color: scheme.error, width: 2),
        ),
        contentPadding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 14.h),
      ),

      // Icon Theme
      iconTheme: IconThemeData(
        color: scheme.onSurfaceVariant,
        size: 24.w,
      ),

      // Floating Action Button Theme
      floatingActionButtonTheme: FloatingActionButtonThemeData(
        backgroundColor: scheme.primary,
        foregroundColor: scheme.onPrimary,
        elevation: 0,
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(16.r),
        ),
      ),

      // Bottom Navigation Bar Theme
      bottomNavigationBarTheme: BottomNavigationBarThemeData(
        backgroundColor: scheme.surface,
        selectedItemColor: scheme.primary,
        unselectedItemColor: scheme.onSurfaceVariant,
        selectedLabelStyle: _textTheme(scheme).labelLarge,
        unselectedLabelStyle: _textTheme(scheme).labelLarge!.copyWith(
          color: scheme.onSurfaceVariant,
          fontWeight: FontWeight.w600,
        ),
        type: BottomNavigationBarType.fixed,
        elevation: 0,
      ),

      // Divider Theme
      dividerTheme: DividerThemeData(
        color: scheme.outlineVariant,
        thickness: 1,
        space: 1,
      ),

      // Chip Theme
      chipTheme: ChipThemeData(
        backgroundColor: scheme.surfaceContainerHighest,
        selectedColor: scheme.primaryContainer,
        labelStyle: _textTheme(scheme).labelLarge,
        padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 8.h),
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(16.r),
        ),
      ),

      // Dialog Theme - Accessibility Enhanced
      // dialogTheme: DialogThemeData(
      //   backgroundColor: darkSurface,
      //   elevation: 8, // More elevation
      //   shape: RoundedRectangleBorder(
      //     borderRadius: BorderRadius.circular(20.r),
      //   ),
      //   titleTextStyle: TextStyle(
      //     fontSize: (22.sp * fontSizeMultiplier),
      //     fontWeight: FontWeight.bold,
      //     color: darkTextPrimary,
      //   ),
      //   contentTextStyle: TextStyle(
      //     fontSize: (17.sp * fontSizeMultiplier),
      //     color: darkTextSecondary,
      //     height: 1.5,
      //   ),
      // ),

      // Snackbar Theme
      snackBarTheme: SnackBarThemeData(
        backgroundColor: scheme.inverseSurface,
        contentTextStyle: _textTheme(scheme).bodyMedium!.copyWith(
          color: scheme.onInverseSurface,
          fontWeight: FontWeight.w600,
        ),
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(12.r),
        ),
        behavior: SnackBarBehavior.floating,
      ),
    );
  }
}

