import 'package:flutter/material.dart';
import 'package:wolf_3d_data_types/wolf_3d_data_types.dart';
import 'package:wolf_3d_flutter/wolf_3d.dart';
import 'package:wolf_dart/screens/difficulty_screen.dart';
import 'package:wolf_dart/screens/sprite_gallery.dart';
import 'package:wolf_dart/screens/vga_gallery.dart';

class EpisodeScreen extends StatefulWidget {
  const EpisodeScreen({super.key});

  @override
  State<EpisodeScreen> createState() => _EpisodeScreenState();
}

class _EpisodeScreenState extends State<EpisodeScreen> {
  @override
  void initState() {
    super.initState();
    Wolf3d.I.audio.playMenuMusic();
  }

  void _selectEpisode(int index) {
    Wolf3d.I.setActiveEpisode(index);
    Navigator.of(context).push(
      MaterialPageRoute(
        builder: (context) => DifficultyScreen(),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    final List<Episode> episodes = Wolf3d.I.activeGame.episodes;

    return Scaffold(
      backgroundColor: Colors.teal,
      floatingActionButtonLocation:
          FloatingActionButtonLocation.miniCenterFloat,
      floatingActionButton: Row(
        children: [
          FloatingActionButton(
            onPressed: () {
              Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (context) {
                    return VgaGallery(images: Wolf3d.I.vgaImages);
                  },
                ),
              );
            },
            child: Text('VGA Gallery'),
          ),
          FloatingActionButton(
            onPressed: () {
              Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (context) {
                    return SpriteGallery(sprites: Wolf3d.I.sprites);
                  },
                ),
              );
            },
            child: Text('Sprites'),
          ),
        ],
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              'WHICH EPISODE TO PLAY?',
              style: TextStyle(
                color: Colors.red,
                fontSize: 32,
                fontWeight: FontWeight.bold,
                fontFamily: 'Courier',
              ),
            ),
            const SizedBox(height: 40),
            ListView.builder(
              shrinkWrap: true,
              itemCount: episodes.length,
              itemBuilder: (context, index) {
                final Episode episode = episodes[index];
                return Padding(
                  padding: const EdgeInsets.symmetric(
                    vertical: 8.0,
                    horizontal: 32.0,
                  ),
                  child: ElevatedButton(
                    style: ElevatedButton.styleFrom(
                      backgroundColor: Colors.blueGrey[900],
                      foregroundColor: Colors.white,
                      minimumSize: const Size(300, 60),
                      shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(4),
                      ),
                    ),
                    onPressed: () => _selectEpisode(index),
                    child: Text(
                      episode.name,
                      textAlign: TextAlign.center,
                      style: const TextStyle(fontSize: 18),
                    ),
                  ),
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}
