import 'package:flutter/material.dart';

class AppThemes {
  // Private constructor to prevent instantiation
  AppThemes._();

  // Light theme colors
  static const Color _primaryColorLight = Color(0xFF1E88E5); // Blue 600
  static const Color _secondaryColorLight = Color(0xFF26A69A); // Teal 400
  static const Color _errorColorLight = Color(0xFFE53935); // Red 600
  static const Color _surfaceColorLight = Colors.white;

  // Dark theme colors
  static const Color _primaryColorDark = Color(0xFF42A5F5); // Blue 400
  static const Color _secondaryColorDark = Color(0xFF4DB6AC); // Teal 300
  static const Color _errorColorDark = Color(0xFFEF5350); // Red 400
  static const Color _surfaceColorDark = Color(0xFF1E1E1E);

  // Text themes
  static const TextTheme _textThemeLight = TextTheme(
    displayLarge: TextStyle(
      fontSize: 96,
      fontWeight: FontWeight.w300,
      color: Color(0xFF212121),
      fontFamily: 'Rubik',
    ),
    displayMedium: TextStyle(
      fontSize: 60,
      fontWeight: FontWeight.w300,
      color: Color(0xFF212121),
      fontFamily: 'Rubik',
    ),
    displaySmall: TextStyle(
      fontSize: 48,
      fontWeight: FontWeight.w400,
      color: Color(0xFF212121),
      fontFamily: 'Rubik',
    ),
    headlineMedium: TextStyle(
      fontSize: 34,
      fontWeight: FontWeight.w400,
      color: Color(0xFF212121),
      fontFamily: 'Rubik',
    ),
    headlineSmall: TextStyle(
      fontSize: 24,
      fontWeight: FontWeight.w400,
      color: Color(0xFF212121),
      fontFamily: 'Rubik',
    ),
    titleLarge: TextStyle(
      fontSize: 20,
      fontWeight: FontWeight.w500,
      color: Color(0xFF212121),
      fontFamily: 'Rubik',
    ),
    bodyLarge: TextStyle(
      fontSize: 16,
      fontWeight: FontWeight.w400,
      color: Color(0xFF212121),
      fontFamily: 'Rubik',
    ),
    bodyMedium: TextStyle(
      fontSize: 14,
      fontWeight: FontWeight.w400,
      color: Color(0xFF212121),
      fontFamily: 'Rubik',
    ),
    bodySmall: TextStyle(
      fontSize: 12,
      fontWeight: FontWeight.w400,
      color: Color(0xFF757575),
      fontFamily: 'Rubik',
    ),
    labelLarge: TextStyle(
      fontSize: 14,
      fontWeight: FontWeight.w500,
      color: Color(0xFF212121),
      fontFamily: 'Rubik',
    ),
  );

  static final TextTheme _textThemeDark = _textThemeLight.copyWith(
    displayLarge: _textThemeLight.displayLarge?.copyWith(color: Colors.white),
    displayMedium: _textThemeLight.displayMedium?.copyWith(color: Colors.white),
    displaySmall: _textThemeLight.displaySmall?.copyWith(color: Colors.white),
    headlineMedium:
        _textThemeLight.headlineMedium?.copyWith(color: Colors.white),
    headlineSmall: _textThemeLight.headlineSmall?.copyWith(color: Colors.white),
    titleLarge: _textThemeLight.titleLarge?.copyWith(color: Colors.white),
    bodyLarge: _textThemeLight.bodyLarge?.copyWith(color: Colors.white),
    bodyMedium: _textThemeLight.bodyMedium?.copyWith(color: Colors.white),
    bodySmall: _textThemeLight.bodySmall?.copyWith(color: Colors.white70),
    labelLarge: _textThemeLight.labelLarge?.copyWith(color: Colors.white),
  );

  // Light theme
  static final ThemeData lightTheme = ThemeData(
    useMaterial3: true,
    fontFamily: 'Rubik',
    colorScheme: const ColorScheme.light(
      primary: _primaryColorLight,
      secondary: _secondaryColorLight,
      error: _errorColorLight,
      surface: _surfaceColorLight,
      onPrimary: Colors.white,
      onSecondary: Colors.white,
      onSurface: Colors.black87,
      onError: Colors.white,
      brightness: Brightness.light,
    ),
    textTheme: _textThemeLight,
    appBarTheme: const AppBarTheme(
      elevation: 0,
      backgroundColor: _surfaceColorLight,
      foregroundColor: Color(0xFF212121),
      centerTitle: true,
    ),
    cardTheme: CardThemeData(
      //Earlier CardThemeData
      elevation: 2,
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(12),
      ),
    ),
    elevatedButtonTheme: ElevatedButtonThemeData(
      style: ElevatedButton.styleFrom(
        foregroundColor: Colors.white,
        backgroundColor: _primaryColorLight,
        elevation: 2,
        padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(8),
        ),
      ),
    ),
    outlinedButtonTheme: OutlinedButtonThemeData(
      style: OutlinedButton.styleFrom(
        foregroundColor: _primaryColorLight,
        side: const BorderSide(color: _primaryColorLight),
        padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(8),
        ),
      ),
    ),
    textButtonTheme: TextButtonThemeData(
      style: TextButton.styleFrom(
        foregroundColor: _primaryColorLight,
        padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
      ),
    ),
    inputDecorationTheme: InputDecorationTheme(
      filled: true,
      fillColor: Colors.grey[100],
      contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
      border: OutlineInputBorder(
        borderRadius: BorderRadius.circular(8),
        borderSide: BorderSide.none,
      ),
      enabledBorder: OutlineInputBorder(
        borderRadius: BorderRadius.circular(8),
        borderSide: BorderSide(color: Colors.grey[300]!),
      ),
      focusedBorder: OutlineInputBorder(
        borderRadius: BorderRadius.circular(8),
        borderSide: const BorderSide(color: _primaryColorLight, width: 2),
      ),
      errorBorder: OutlineInputBorder(
        borderRadius: BorderRadius.circular(8),
        borderSide: const BorderSide(color: _errorColorLight, width: 2),
      ),
      labelStyle: const TextStyle(color: Colors.grey),
    ),
    bottomNavigationBarTheme: const BottomNavigationBarThemeData(
      selectedItemColor: _primaryColorLight,
      unselectedItemColor: Colors.grey,
    ),
  );

  // Dark theme
  static final ThemeData darkTheme = ThemeData(
    fontFamily: 'Rubik',
    useMaterial3: true,
    colorScheme: const ColorScheme.dark(
      primary: _primaryColorDark,
      secondary: _secondaryColorDark,
      error: _errorColorDark,
      surface: _surfaceColorDark,
      onPrimary: Colors.black,
      onSecondary: Colors.black,
      onSurface: Colors.white,
      onError: Colors.black,
      brightness: Brightness.dark,
    ),
    textTheme: _textThemeDark,
    appBarTheme: const AppBarTheme(
      elevation: 0,
      backgroundColor: _surfaceColorDark,
      foregroundColor: Colors.white,
      centerTitle: true,
    ),
    cardTheme: CardThemeData(
      //Earlier was CardThemeData
      elevation: 2,
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(12),
      ),
      color: const Color(0xFF2C2C2C),
    ),
    elevatedButtonTheme: ElevatedButtonThemeData(
      style: ElevatedButton.styleFrom(
        foregroundColor: Colors.black,
        backgroundColor: _primaryColorDark,
        elevation: 2,
        padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(8),
        ),
      ),
    ),
    outlinedButtonTheme: OutlinedButtonThemeData(
      style: OutlinedButton.styleFrom(
        foregroundColor: _primaryColorDark,
        side: const BorderSide(color: _primaryColorDark),
        padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(8),
        ),
      ),
    ),
    textButtonTheme: TextButtonThemeData(
      style: TextButton.styleFrom(
        foregroundColor: _primaryColorDark,
        padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
      ),
    ),
    inputDecorationTheme: InputDecorationTheme(
      filled: true,
      fillColor: const Color(0xFF2A2A2A),
      contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
      border: OutlineInputBorder(
        borderRadius: BorderRadius.circular(8),
        borderSide: BorderSide.none,
      ),
      enabledBorder: OutlineInputBorder(
        borderRadius: BorderRadius.circular(8),
        borderSide: const BorderSide(color: Color(0xFF3A3A3A)),
      ),
      focusedBorder: OutlineInputBorder(
        borderRadius: BorderRadius.circular(8),
        borderSide: const BorderSide(color: _primaryColorDark, width: 2),
      ),
      errorBorder: OutlineInputBorder(
        borderRadius: BorderRadius.circular(8),
        borderSide: const BorderSide(color: _errorColorDark, width: 2),
      ),
      labelStyle: const TextStyle(color: Colors.grey),
    ),
    bottomNavigationBarTheme: const BottomNavigationBarThemeData(
      selectedItemColor: _primaryColorDark,
      unselectedItemColor: Colors.grey,
      backgroundColor: _surfaceColorDark,
    ),
  );
}
