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

import '../api/endpoints/likes.dart';
import '../likes/like_button.dart';
import '../player/player_provider.dart';
import '../theme/theme_extension.dart';
import 'library_providers.dart';
import 'widgets/track_row.dart';

class AlbumDetailScreen extends ConsumerWidget {
  const AlbumDetailScreen({required this.id, super.key});
  final String id;

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final fs = Theme.of(context).extension<FabledSwordTheme>()!;
    return Scaffold(
      appBar: AppBar(),
      backgroundColor: fs.obsidian,
      body: ref.watch(albumProvider(id)).when(
            error: (e, _) => Center(child: Text('$e', style: TextStyle(color: fs.error))),
            loading: () => const Center(child: CircularProgressIndicator()),
            data: (r) => ListView(children: [
              Padding(
                padding: const EdgeInsets.all(16),
                child: Row(children: [
                  Container(width: 96, height: 96, color: fs.slate),
                  const SizedBox(width: 16),
                  Expanded(child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(r.album.title, style: TextStyle(
                        color: fs.parchment,
                        fontFamily: fs.display.fontFamily,
                        fontSize: 22,
                      )),
                      Text(r.album.artistName, style: TextStyle(color: fs.ash)),
                    ],
                  )),
                  Container(
                    width: 48, height: 48,
                    decoration: BoxDecoration(color: fs.accent, shape: BoxShape.circle),
                    child: IconButton(
                      icon: Icon(Icons.play_arrow, color: fs.parchment),
                      onPressed: () => ref.read(playerActionsProvider).playTracks(r.tracks),
                    ),
                  ),
                  LikeButton(kind: LikeKind.album, id: r.album.id, size: 28),
                ]),
              ),
              for (final t in r.tracks)
                TrackRow(
                  track: t,
                  onTap: () {
                    final start = r.tracks.indexOf(t);
                    ref.read(playerActionsProvider).playTracks(r.tracks, initialIndex: start);
                  },
                  trailing: LikeButton(kind: LikeKind.track, id: t.id),
                ),
            ]),
          ),
    );
  }
}
