import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';

import '../../../core/api/api_error_mapper.dart';
import '../../../core/l10n/l10n.dart';
import '../../profile/data/profile_repository.dart';
import 'admin_products_panel.dart';

enum _DatabaseTab { inventory, pantry, products }

class AdminDatabasePanel extends ConsumerStatefulWidget {
  final bool embedded;

  const AdminDatabasePanel({super.key, this.embedded = false});

  @override
  ConsumerState<AdminDatabasePanel> createState() => _AdminDatabasePanelState();
}

class _AdminDatabasePanelState extends ConsumerState<AdminDatabasePanel> {
  _DatabaseTab _activeTab = _DatabaseTab.inventory;
  bool _isRefreshingCategories = false;

  Future<void> _refreshCategories() async {
    setState(() => _isRefreshingCategories = true);
    try {
      await ref.read(profileRepositoryProvider).refreshCategories();
      if (!mounted) return;
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('Kategorier har uppdaterats.')),
      );
    } catch (e) {
      if (!mounted) return;
      ScaffoldMessenger.of(context).showSnackBar(
        buildCopyableErrorSnackBar(context, mapErrorToUserMessage(e, context)),
      );
    } finally {
      if (mounted) setState(() => _isRefreshingCategories = false);
    }
  }

  Widget _sectionCard({
    required IconData icon,
    required String title,
    required String description,
    required VoidCallback onPressed,
    required String buttonLabel,
  }) {
    return Card(
      child: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              children: [
                Icon(icon),
                const SizedBox(width: 8),
                Expanded(
                  child: Text(title, style: Theme.of(context).textTheme.titleMedium),
                ),
              ],
            ),
            const SizedBox(height: 8),
            Text(description),
            const SizedBox(height: 16),
            FilledButton.icon(
              onPressed: onPressed,
              icon: Icon(icon),
              label: Text(buttonLabel),
            ),
          ],
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    String tabLabel(_DatabaseTab tab) {
      switch (tab) {
        case _DatabaseTab.inventory:
          return context.l10n.profileInventoryTab;
        case _DatabaseTab.pantry:
          return context.l10n.profilePantryTab;
        case _DatabaseTab.products:
          return context.l10n.profileProductsTab;
      }
    }

    Widget activeSection;
    switch (_activeTab) {
      case _DatabaseTab.inventory:
        activeSection = _sectionCard(
          icon: Icons.inventory_2_outlined,
          title: context.l10n.profileInventoryTab,
          description: context.l10n.profileInventoryDescription,
          onPressed: () => context.go('/inventory'),
          buttonLabel: context.l10n.profileOpenInventory,
        );
      case _DatabaseTab.pantry:
        activeSection = _sectionCard(
          icon: Icons.storefront_outlined,
          title: context.l10n.profilePantryTab,
          description: context.l10n.profilePantryDescription,
          onPressed: () => context.go('/baslager'),
          buttonLabel: context.l10n.profileOpenPantry,
        );
      case _DatabaseTab.products:
        activeSection = const AdminProductsPanel(embedded: true);
    }

    return SingleChildScrollView(
      padding: widget.embedded ? EdgeInsets.zero : const EdgeInsets.all(16),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text(
            context.l10n.profileDatabaseDescription,
            style: Theme.of(context).textTheme.bodyMedium,
          ),
          const SizedBox(height: 12),
          Card(
            child: Padding(
              padding: const EdgeInsets.all(16),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    'Adminverktyg',
                    style: Theme.of(context).textTheme.titleMedium,
                  ),
                  const SizedBox(height: 8),
                  Text(
                    'Uppdatera kategorier manuellt i backend-cachen.',
                    style: Theme.of(context).textTheme.bodyMedium,
                  ),
                  const SizedBox(height: 12),
                  SizedBox(
                    width: double.infinity,
                    child: OutlinedButton.icon(
                      onPressed: _isRefreshingCategories ? null : _refreshCategories,
                      icon: _isRefreshingCategories
                          ? const SizedBox(
                              height: 16,
                              width: 16,
                              child: CircularProgressIndicator(strokeWidth: 2),
                            )
                          : const Icon(Icons.refresh),
                      label: const Text('Uppdatera kategorier'),
                    ),
                  ),
                ],
              ),
            ),
          ),
          const SizedBox(height: 12),
          SingleChildScrollView(
            scrollDirection: Axis.horizontal,
            child: Row(
              children: _DatabaseTab.values
                  .map(
                    (tab) => Padding(
                      padding: const EdgeInsets.only(right: 8),
                      child: ChoiceChip(
                        label: Text(tabLabel(tab)),
                        selected: _activeTab == tab,
                        onSelected: (_) => setState(() => _activeTab = tab),
                      ),
                    ),
                  )
                  .toList(),
            ),
          ),
          const SizedBox(height: 16),
          activeSection,
        ],
      ),
    );
  }
}

