import 'package:flutter/material.dart';

/// تم بصری حکم‌شو (الهام‌گرفته از اپ مرجع: قرمز تیره و طلایی).
/// همه‌ی رنگ‌های پرتکرار اینجا متمرکزند تا در کد به‌صورت ثابتِ بی‌نام تکرار نشوند.
class AppColors {
  // پایه — تمِ شاهانهٔ ایران باستان: لاجوردِ تخت‌جمشید + طلا (با شنگرفِ کنتراست).
  static const bg = Color(0xFF0E2347); // لاجوردِ شب
  static const bgDark = Color(0xFF081428); // لاجوردِ تیره
  static const panel = Color(0xFF17345C); // پنلِ نیمه‌شب آبی
  static const gold = Color(0xFFE9B949);
  static const goldDark = Color(0xFFB8860B);
  static const goldFaint = Color(0x33E9B949); // جداکننده/خطِ طلاییِ کم‌رنگ
  static const accent = Color(0xFFB81D2A); // شنگرفِ ایرانی (کنشِ مهم/خروج)
  static const green = Color(0xFF2E7D32);
  static const text = Color(0xFFF5E9D0);

  // رمپِ لاجوردِ شاهانه (روشن → تیره) برای پس‌زمینه‌ها، پنل‌ها و میز.
  static const lapis = Color(0xFF1E5FA8); // فیروزه‌ایِ روشن (تأکید/تب)
  static const lapisHi = Color(0xFF1C4E8E); // سطحِ روشن (میز/اوال)
  static const lapisMid = Color(0xFF1B4576); // پنلِ گرادیانِ بالا
  static const lapisLo = Color(0xFF0C2848); // گرادیانِ پایین
  static const lapisNight = Color(0xFF071A33); // لبهٔ میز/پس‌زمینهٔ Flame
  static const lapisInk = Color(0xFF04101F); // مرکزِ تیرهٔ میز

  // معنایی (دکمه‌ها/وضعیت/خال‌ها)
  static const success = Color(0xFF3FA34D); // سبزِ روشنِ دکمه
  static const successDark = Color(0xFF1B5E20); // سبزِ تیره (گرادیان/درخشش)
  static const online = Color(0xFF4CD964); // نشانگرِ اتصالِ آنلاین
  static const suitRed = Color(0xFFD32F2F); // دل/خشت
  static const suitDark = Color(0xFF1A1A1A); // پیک/گشنیز (مرکّبِ کارت)
}

/// نمادِ یک‌نواییِ خال و رنگش از روی نامِ کاملِ خال (hearts/diamonds/clubs/spades).
/// منبعِ واحدِ این منطق تا در صفحه‌های مختلف تکرار نشود.
(String, Color) suitGlyph(String? suit) {
  switch (suit) {
    case 'hearts':
      return ('♥', AppColors.suitRed);
    case 'diamonds':
      return ('♦', AppColors.suitRed);
    case 'clubs':
      return ('♣', Colors.white);
    case 'spades':
      return ('♠', Colors.white);
    default:
      return ('—', Colors.white54);
  }
}

class AppTheme {
  static ThemeData build() {
    const fontFamily = 'Dana';
    final base = ThemeData.dark(useMaterial3: true);
    return base.copyWith(
      scaffoldBackgroundColor: AppColors.bg,
      primaryColor: AppColors.lapis,
      canvasColor: AppColors.bg,
      cardColor: AppColors.panel,
      dividerColor: AppColors.goldFaint,
      colorScheme: base.colorScheme.copyWith(
        primary: AppColors.gold,
        onPrimary: AppColors.lapisInk,
        secondary: AppColors.lapis,
        tertiary: AppColors.accent,
        surface: AppColors.panel,
        onSurface: AppColors.text,
      ),
      textTheme: base.textTheme.apply(
        fontFamily: fontFamily,
        bodyColor: AppColors.text,
        displayColor: AppColors.text,
      ),
      appBarTheme: const AppBarTheme(
        backgroundColor: AppColors.bgDark,
        foregroundColor: AppColors.gold,
        centerTitle: true,
      ),
      // دیالوگ/منو/اسنک‌بار با همان قابِ لاجورد + طلا.
      dialogTheme: DialogThemeData(
        backgroundColor: AppColors.panel,
        surfaceTintColor: Colors.transparent,
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(18),
          side: const BorderSide(color: AppColors.gold, width: 1.5),
        ),
        titleTextStyle: const TextStyle(
            fontFamily: fontFamily,
            color: AppColors.gold,
            fontSize: 19,
            fontWeight: FontWeight.bold),
        contentTextStyle:
            const TextStyle(fontFamily: fontFamily, color: AppColors.text),
      ),
      snackBarTheme: const SnackBarThemeData(
        backgroundColor: AppColors.lapisMid,
        contentTextStyle: TextStyle(fontFamily: fontFamily, color: AppColors.text),
        behavior: SnackBarBehavior.floating,
      ),
      tabBarTheme: const TabBarThemeData(
        labelColor: AppColors.gold,
        unselectedLabelColor: Colors.white60,
        indicatorColor: AppColors.gold,
      ),
      bottomSheetTheme: const BottomSheetThemeData(
        backgroundColor: AppColors.panel,
        surfaceTintColor: Colors.transparent,
      ),
      inputDecorationTheme: InputDecorationTheme(
        filled: true,
        fillColor: AppColors.bgDark.withValues(alpha: 0.6),
        hintStyle: const TextStyle(color: Colors.white38),
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(12),
          borderSide: const BorderSide(color: AppColors.goldDark),
        ),
        enabledBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(12),
          borderSide: const BorderSide(color: AppColors.goldDark),
        ),
        focusedBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(12),
          borderSide: const BorderSide(color: AppColors.gold, width: 2),
        ),
      ),
      elevatedButtonTheme: ElevatedButtonThemeData(
        style: ElevatedButton.styleFrom(
          backgroundColor: AppColors.accent,
          foregroundColor: AppColors.text,
          minimumSize: const Size.fromHeight(54),
          elevation: 8,
          shadowColor: Colors.black,
          textStyle: const TextStyle(
              fontFamily: fontFamily, fontSize: 18, fontWeight: FontWeight.bold),
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(14),
            side: const BorderSide(color: AppColors.gold, width: 1.5),
          ),
        ).copyWith(
          // افکتِ فشار: کمی فرورفتن هنگام لمس برای حسِ عمق.
          elevation: WidgetStateProperty.resolveWith(
            (states) => states.contains(WidgetState.pressed) ? 2.0 : 8.0,
          ),
        ),
      ),
    );
  }
}
