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

import '../estado/estado_radio.dart';
import '../widgets/pluri_glass_surface.dart';
import '../widgets/pluri_icon.dart';
import '../widgets/pluri_layout.dart';
import '../widgets/pluri_premium_widgets.dart';
import 'package:pluriwave/widgets/tarjeta_emisora.dart';

import 'reproducir_minimizado.dart';

class PantallaFavoritos extends StatelessWidget {
  const PantallaFavoritos({super.key});

  @override
  Widget build(BuildContext context) {
    final estado = context.watch<EstadoRadio>();
    final favoritos = estado.listaFavoritos;

    if (favoritos.isEmpty) {
      return ListView(
        padding: PluriLayout.pageListPadding,
        children: [
          PluriScreenHeader(
            title: 'Favoritos',
            subtitle: 'Tu cabina personal para volver a las senales que mas escuchas.',
            glyph: PluriIconGlyph.favorites,
            trailing: PluriStatusPill(
              icon: Icons.favorite_rounded,
              label: 'Coleccion',
            ),
          ),
          SizedBox(
            height: 320,
            child: PluriEmptyState(
              glyph: PluriIconGlyph.favorites,
              title: 'Sin favoritos aun',
              subtitle: 'Toca el corazon en cualquier emisora para guardarla en tu coleccion.',
            ),
          ),
        ],
      );
    }

    return CustomScrollView(
      slivers: [
        SliverToBoxAdapter(
          child: PluriScreenHeader(
            title: 'Favoritos',
            subtitle: 'Reordena tu coleccion y deja arriba las radios que mas importan.',
            glyph: PluriIconGlyph.favorites,
            trailing: PluriStatusPill(
              icon: Icons.library_music_rounded,
              label: '${favoritos.length} guardadas',
            ),
          ),
        ),
        SliverPadding(
          padding: const EdgeInsets.fromLTRB(PluriLayout.horizontal, 4, PluriLayout.horizontal, PluriLayout.bottomChromeInset),
          sliver: SliverReorderableList(
            proxyDecorator: (child, index, animation) => ScaleTransition(
              scale: Tween<double>(begin: 1, end: 1.03).animate(animation),
              child: child,
            ),
            // ignore: deprecated_member_use
            onReorder: (oldIndex, newIndex) async {
              if (newIndex > oldIndex) newIndex--;
              final emisora = favoritos[oldIndex];
              await estado.favoritos.reordenar(emisora.uuid, newIndex);
              await estado.cargarFavoritos();
            },
            itemCount: favoritos.length,
            itemBuilder: (context, i) {
              final emisora = favoritos[i];
              return Padding(
                key: ValueKey('favorito-pad-${emisora.uuid}'),
                padding: const EdgeInsets.symmetric(vertical: 5),
                child: PluriGlassSurface(
                  padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 7),
                  child: Row(
                    children: [
                      ReorderableDragStartListener(
                        index: i,
                        child: const Padding(
                          padding: EdgeInsets.all(8),
                          child: Icon(Icons.drag_indicator_rounded),
                        ),
                      ),
                      Expanded(
                        child: TarjetaEmisora(
                          key: Key(emisora.uuid),
                          emisora: emisora,
                          esCompacta: true,
                          onTap: () => reproducirMinimizado(context, emisora),
                        ),
                      ),
                      IconButton.filledTonal(
                        tooltip: 'Eliminar de favoritos',
                        icon: const Icon(Icons.delete_outline_rounded),
                        onPressed: () async {
                          await estado.favoritos.eliminar(emisora.uuid);
                          await estado.cargarFavoritos();
                          if (context.mounted) {
                            ScaffoldMessenger.of(context).showSnackBar(
                              SnackBar(
                                content: Text('${emisora.nombre} eliminada de favoritos'),
                              ),
                            );
                          }
                        },
                      ),
                    ],
                  ),
                ),
              );
            },
          ),
        ),
      ],
    );
  }
}
