// ignore_for_file: avoid_print

import 'package:fluent_ui/fluent_ui.dart' as fluent;
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
import 'package:flutter/material.dart';
import 'package:music_web_player/api.dart';
import 'package:music_web_player/ui/music_player.dart';

class PlayerApp extends StatelessWidget {
  const PlayerApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Music player',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.green,
        brightness: Brightness.dark,
      ),
      home: fluent.FluentTheme(
        data: fluent.ThemeData(
          iconTheme: const IconThemeData(color: Colors.white),
          brightness: fluent.Brightness.dark,
        ),
        child: const AppHome(),
      ),
    );
  }
}

class AppHome extends StatefulWidget {
  const AppHome({Key? key}) : super(key: key);

  @override
  State<AppHome> createState() => _AppHomeState();
}

class _AppHomeState extends State<AppHome> {
  var error = false;
  List<MusicEntry>? musics;

  Future<void> load() async {
    try {
      setState(() => error = false);
      musics = await API.getList();
      setState(() {});
    } catch (e, s) {
      print("$e $s");
      setState(() => error = true);
    }
  }

  @override
  void initState() {
    super.initState();
    load();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(body: buildBody(context));
  }

  Widget buildBody(BuildContext context) {
    if (error) {
      return Center(
          child: IntrinsicHeight(
        child: Column(
          children: [
            const Icon(
              FluentIcons.warning_24_regular,
              size: 50,
              color: Colors.white,
            ),
            const SizedBox(height: 50),
            const Text("Failed to load musics list!"),
            const SizedBox(height: 50),
            fluent.FilledButton(
              onPressed: load,
              child: Text("Try again".toUpperCase()),
            ),
          ],
        ),
      ));
    }

    if (musics == null) {
      return const Center(child: fluent.ProgressRing());
    }

    if (musics!.isEmpty) {
      return const Center(child: Text("Musics list is empty!"));
    }

    return MusicPlayer(musicsList: musics!);
  }
}