import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../app/routes/app_pages.dart';
import '../controllers/dashboard_controller.dart';
import '../../../core/utils/app_snackbar.dart';

class DashboardView extends GetView<DashboardController> {
  const DashboardView({super.key});

  @override
  Widget build(BuildContext context) {
    final isDark = Theme.of(context).brightness == Brightness.dark;

    return Column(
      children: [
        // Custom Top Bar
        Container(
          padding: EdgeInsets.only(
              top: MediaQuery.of(context).padding.top,
              left: 8,
              right: 8,
              bottom: 12),
          color: isDark ? const Color(0xFF1E1E2E) : const Color(0xFF0F4C81),
          child: Row(
            children: [
              const SizedBox(width: 48),
              const Expanded(
                child: Center(
                  child: Text(
                    'مُصادَق',
                    style: TextStyle(
                        color: Colors.white,
                        fontSize: 20,
                        fontWeight: FontWeight.bold),
                  ),
                ),
              ),
              IconButton(
                icon: const Icon(Icons.notifications_outlined,
                    color: Colors.white),
                onPressed: () =>
                    AppSnackbar.showInfo('قريباً', 'الإشعارات ستتوفر قريباً'),
              ),
              IconButton(
                icon: const Icon(Icons.refresh, color: Colors.white),
                onPressed: () => controller.refreshData(),
              ),
            ],
          ),
        ),

        Expanded(
          child: Obx(() {
            if (controller.isLoading.value) {
              return const Center(
                  child: CircularProgressIndicator(color: Color(0xFF0F4C81)));
            }

            final stats = controller.stats;
            final role = controller.userRole.value;

            return RefreshIndicator(
              onRefresh: () async => controller.refreshData(),
              child: SingleChildScrollView(
                physics: const AlwaysScrollableScrollPhysics(),
                padding: const EdgeInsets.all(16.0),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    _buildWelcomeHeader(role, isDark),
                    const SizedBox(height: 24),
                    _buildQuickActions(isDark),
                    if (role == 'admin' || role == 'super_admin') ...[
                      const SizedBox(height: 24),
                      _buildAdminQuickActions(role, isDark),
                    ],
                    const SizedBox(height: 32),
                    const Text('إحصائيات الفواتير',
                        style: TextStyle(
                            fontSize: 18, fontWeight: FontWeight.bold)),
                    const SizedBox(height: 12),
                    _buildInvoiceStats(stats, isDark),
                    if (role == 'admin' || role == 'super_admin') ...[
                      const SizedBox(height: 24),
                      const Text('نظرة عامة',
                          style: TextStyle(
                              fontSize: 18, fontWeight: FontWeight.bold)),
                      const SizedBox(height: 12),
                      _buildRoleSpecificStats(stats, role, isDark),
                    ],
                    if (role == 'admin' && stats['subscription'] != null) ...[
                      const SizedBox(height: 24),
                      _buildQuotaMeter(stats['subscription'], isDark),
                    ],
                    const SizedBox(height: 32),
                    const Text('أحدث النشاطات',
                        style: TextStyle(
                            fontSize: 18, fontWeight: FontWeight.bold)),
                    const SizedBox(height: 12),
                    _buildRecentActivity(isDark),
                    const SizedBox(height: 40),
                  ],
                ),
              ),
            );
          }),
        ),
      ],
    );
  }

  Widget _buildWelcomeHeader(String role, bool isDark) {
    String roleName = 'مستخدم';
    switch (role) {
      case 'super_admin':
        roleName = 'مدير النظام';
        break;
      case 'admin':
        roleName = 'مدير المكتب';
        break;
      case 'accountant':
        roleName = 'محاسب';
        break;
    }

    return Row(
      children: [
        const CircleAvatar(
          radius: 30,
          backgroundColor: Color(0xFFE2E8F0),
          child: Icon(Icons.person, size: 30, color: Color(0xFF64748B)),
        ),
        const SizedBox(width: 16),
        Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            const Text('مرحباً بك في مُصادَق 👋',
                style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
            Text('صلاحيات: $roleName',
                style: TextStyle(
                    color: isDark ? Colors.white38 : Colors.grey,
                    fontSize: 14)),
          ],
        ),
      ],
    );
  }

  Widget _buildQuickActions(bool isDark) {
    return Row(
      children: [
        Expanded(
          child: ElevatedButton.icon(
            icon: const Icon(Icons.document_scanner),
            label: const Text('المسح الضوئي',
                style: TextStyle(fontWeight: FontWeight.bold, fontSize: 13)),
            style: ElevatedButton.styleFrom(
              backgroundColor: const Color(0xFF0F4C81),
              foregroundColor: Colors.white,
              padding: const EdgeInsets.symmetric(vertical: 16),
              shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(12)),
            ),
            onPressed: () => Get.toNamed(AppRoutes.SCANNER),
          ),
        ),
        const SizedBox(width: 12),
        Expanded(
          child: OutlinedButton.icon(
            icon: const Icon(Icons.mic_rounded),
            label: const Text('المساعد الصوتي',
                style: TextStyle(fontWeight: FontWeight.bold, fontSize: 13)),
            style: OutlinedButton.styleFrom(
              foregroundColor:
                  isDark ? const Color(0xFF5EEAD4) : const Color(0xFF0F4C81),
              side: BorderSide(
                  color: isDark
                      ? const Color(0xFF5EEAD4)
                      : const Color(0xFF0F4C81)),
              padding: const EdgeInsets.symmetric(vertical: 16),
              shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(12)),
            ),
            onPressed: () {
              controller.startVoiceAssistant();
            },
          ),
        ),
      ],
    );
  }

  Widget _buildAdminQuickActions(String role, bool isDark) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        const Text('إدارة الأعمال',
            style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
        const SizedBox(height: 12),
        SingleChildScrollView(
          scrollDirection: Axis.horizontal,
          child: Row(
            children: [
              _buildAdminActionCard(
                'الشركات',
                Icons.business_rounded,
                Colors.indigo,
                isDark,
                () => Get.toNamed(AppRoutes.COMPANIES_MANAGEMENT),
              ),
              const SizedBox(width: 12),
              _buildAdminActionCard(
                'الموظفين',
                Icons.people_rounded,
                Colors.purple,
                isDark,
                () => Get.toNamed(AppRoutes.USERS_MANAGEMENT),
              ),
              if (role == 'super_admin') ...[
                const SizedBox(width: 12),
                _buildAdminActionCard(
                  'المكاتب',
                  Icons.account_balance_rounded,
                  Colors.teal,
                  isDark,
                  () => Get.toNamed(AppRoutes.TENANTS_MANAGEMENT),
                ),
              ],
              const SizedBox(width: 12),
              _buildAdminActionCard(
                'الاشتراك',
                Icons.workspace_premium_rounded,
                const Color(0xFFD4AF37),
                isDark,
                () => Get.toNamed(AppRoutes.SUBSCRIPTION),
              ),
            ],
          ),
        ),
      ],
    );
  }

  Widget _buildAdminActionCard(String title, IconData icon, Color color,
      bool isDark, VoidCallback onTap) {
    return InkWell(
      onTap: onTap,
      borderRadius: BorderRadius.circular(16),
      child: Container(
        width: 100,
        padding: const EdgeInsets.all(16),
        decoration: BoxDecoration(
          color: isDark ? const Color(0xFF1E1E2E) : Colors.white,
          borderRadius: BorderRadius.circular(16),
          border:
              Border.all(color: isDark ? Colors.white10 : Colors.grey.shade200),
          boxShadow: [
            if (!isDark)
              BoxShadow(
                color: Colors.black.withValues(alpha: 0.03),
                blurRadius: 8,
                offset: const Offset(0, 2),
              ),
          ],
        ),
        child: Column(
          children: [
            Container(
              padding: const EdgeInsets.all(10),
              decoration: BoxDecoration(
                color: color.withValues(alpha: 0.1),
                shape: BoxShape.circle,
              ),
              child: Icon(icon, color: color, size: 24),
            ),
            const SizedBox(height: 10),
            Text(
              title,
              style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 13),
              textAlign: TextAlign.center,
            ),
          ],
        ),
      ),
    );
  }

  Widget _buildInvoiceStats(Map stats, bool isDark) {
    final inv = stats['invoices'] ?? {'total': 0, 'pending': 0, 'approved': 0};
    return Row(
      children: [
        _buildStatCard('الكل', inv['total'].toString(), Icons.receipt_long,
            Colors.blue, isDark),
        const SizedBox(width: 12),
        _buildStatCard('قيد المعالجة', inv['pending'].toString(),
            Icons.hourglass_empty, Colors.orange, isDark),
        const SizedBox(width: 12),
        _buildStatCard('معتمدة', inv['approved'].toString(), Icons.check_circle,
            Colors.green, isDark),
      ],
    );
  }

  Widget _buildRoleSpecificStats(Map stats, String role, bool isDark) {
    if (role == 'super_admin') {
      return Row(
        children: [
          _buildStatCard('المستأجرين', (stats['tenants'] ?? 0).toString(),
              Icons.business_center, Colors.indigo, isDark),
          const SizedBox(width: 12),
          _buildStatCard('المستخدمين', (stats['total_users'] ?? 0).toString(),
              Icons.people, Colors.purple, isDark),
        ],
      );
    } else {
      return Row(
        children: [
          _buildStatCard('الشركات', (stats['companies'] ?? 0).toString(),
              Icons.business, Colors.indigo, isDark),
          const SizedBox(width: 12),
          _buildStatCard('المستخدمين', (stats['users'] ?? 0).toString(),
              Icons.people, Colors.purple, isDark),
        ],
      );
    }
  }

  Widget _buildStatCard(
      String title, String count, IconData icon, Color color, bool isDark) {
    return Expanded(
      child: Container(
        padding: const EdgeInsets.all(16),
        decoration: BoxDecoration(
          color: isDark ? const Color(0xFF1E1E2E) : Colors.white,
          borderRadius: BorderRadius.circular(12),
          border:
              Border.all(color: isDark ? Colors.white10 : Colors.grey.shade200),
        ),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Icon(icon, color: color, size: 28),
            const SizedBox(height: 12),
            Text(count,
                style:
                    const TextStyle(fontSize: 24, fontWeight: FontWeight.bold)),
            Text(title,
                style: TextStyle(
                    color: isDark ? Colors.white38 : Colors.grey,
                    fontSize: 12)),
          ],
        ),
      ),
    );
  }

  Widget _buildQuotaMeter(Map subscription, bool isDark) {
    int limit = subscription['limit'] ?? 100;
    int used = subscription['used'] ?? 0;
    double progress = limit > 0 ? (used / limit) : 0;

    return Container(
      padding: const EdgeInsets.all(16),
      decoration: BoxDecoration(
        color: isDark ? const Color(0xFF1E1E2E) : Colors.white,
        borderRadius: BorderRadius.circular(12),
        border:
            Border.all(color: isDark ? Colors.white10 : Colors.grey.shade200),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          const Text('استهلاك الباقة الشهرية (AI)',
              style: TextStyle(fontWeight: FontWeight.bold)),
          const SizedBox(height: 12),
          LinearProgressIndicator(
            value: progress,
            backgroundColor: isDark ? Colors.white10 : Colors.grey.shade200,
            color: progress > 0.9 ? Colors.red : const Color(0xFF0F4C81),
            minHeight: 8,
            borderRadius: BorderRadius.circular(4),
          ),
          const SizedBox(height: 8),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Text('$used فاتورة',
                  style: const TextStyle(
                      fontWeight: FontWeight.bold, color: Color(0xFF0F4C81))),
              Text('من $limit',
                  style:
                      TextStyle(color: isDark ? Colors.white38 : Colors.grey)),
            ],
          )
        ],
      ),
    );
  }

  Widget _buildRecentActivity(bool isDark) {
    if (controller.recentActivities.isEmpty) {
      return Center(
          child: Text('لا توجد نشاطات حديثة',
              style: TextStyle(color: isDark ? Colors.white38 : Colors.grey)));
    }

    return ListView.builder(
      shrinkWrap: true,
      physics: const NeverScrollableScrollPhysics(),
      itemCount: controller.recentActivities.length,
      itemBuilder: (context, index) {
        final act = controller.recentActivities[index];
        return Card(
          margin: const EdgeInsets.only(bottom: 8),
          elevation: 0,
          color: isDark ? const Color(0xFF1E1E2E) : Colors.white,
          shape: RoundedRectangleBorder(
            side: BorderSide(
                color: isDark ? Colors.white10 : Colors.grey.shade200),
            borderRadius: BorderRadius.circular(12),
          ),
          child: ListTile(
            leading: CircleAvatar(
              backgroundColor:
                  isDark ? Colors.white10 : const Color(0xFFF1F5F9),
              child: Icon(_getActivityIcon(act['action']),
                  color: const Color(0xFF64748B), size: 18),
            ),
            title: Text(_formatAction(act['action'])),
            subtitle: Text(
              _activitySubtitle(act),
              maxLines: 3,
              overflow: TextOverflow.ellipsis,
            ),
            trailing: Text(
              _timeAgo(act['created_at']),
              style: const TextStyle(fontSize: 12, color: Colors.grey),
            ),
          ),
        );
      },
    );
  }

  IconData _getActivityIcon(String action) {
    if (action.contains('approved')) return Icons.check_circle;
    if (action.contains('extracted')) return Icons.auto_awesome;
    if (action.contains('created')) return Icons.add_circle;
    if (action.contains('deleted')) return Icons.delete;
    if (action.contains('login')) return Icons.login;
    return Icons.info;
  }

  String _formatAction(String action) {
    switch (action) {
      case 'invoice.approved':
        return 'اعتماد فاتورة';
      case 'invoice.extracted':
        return 'استخراج بيانات فاتورة';
      case 'company.created':
        return 'إضافة شركة';
      case 'company.deleted':
        return 'حذف شركة';
      case 'user.created':
        return 'إضافة مستخدم';
      case 'user.deleted':
        return 'حذف مستخدم';
      case 'user.login':
        return 'تسجيل دخول';
      case 'payment.created':
        return 'إنشاء طلب دفع';
      case 'payment.approved':
        return 'اعتماد طلب دفع';
      case 'payment.rejected':
        return 'رفض طلب دفع';
      case 'subscription.activated':
        return 'تفعيل اشتراك';
      default:
        return action;
    }
  }

  String _activitySubtitle(dynamic act) {
    final userName = (act['user_name'] ?? '').toString().trim();
    final summary = (act['summary'] ?? '').toString().trim();
    final byUser = 'بواسطة: ${userName.isEmpty ? 'مستخدم مجهول' : userName}';

    if (summary.isEmpty) {
      return byUser;
    }

    return '$summary\n$byUser';
  }

  String _timeAgo(String datetime) {
    try {
      final dt = DateTime.parse(datetime);
      final diff = DateTime.now().difference(dt);
      if (diff.inDays > 0) return 'منذ ${diff.inDays} يوم';
      if (diff.inHours > 0) return 'منذ ${diff.inHours} ساعة';
      if (diff.inMinutes > 0) return 'منذ ${diff.inMinutes} دقيقة';
      return 'الآن';
    } catch (e) {
      return '';
    }
  }
}
