import 'package:flutter/material.dart';
import 'package:minehunter/layout/game.dart';
import 'package:minehunter/layout/parameters.dart';
import 'package:minehunter/provider/data.dart';
import 'package:minehunter/utils/game_utils.dart';
import 'package:provider/provider.dart';
import 'package:overlay_support/overlay_support.dart';

class Home extends StatefulWidget {
  static const String id = 'home';

  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  @override
  void initState() {
    super.initState();

    Data myProvider = Provider.of<Data>(context, listen: false);
    myProvider.initParametersValues();
  }

  List getImagesAssets(Data myProvider) {
    List assets = [];

    List gameImages = [
      'button_back',
      'button_start',
      'game_fail',
      'game_win',
    ];
    myProvider.availableLevelValues.forEach((level) => gameImages.add('level_' + level));
    myProvider.availableSizeValues.forEach((size) => gameImages.add('size_' + size));

    gameImages.forEach((image) => assets.add('assets/icons/' + image + '.png'));

    List skinImages = [
      'button_mark_mine_off',
      'button_mark_mine_on',
      'indicator_report_on',
      'indicator_report_off',
      'indicator_walk_on',
      'indicator_walk_off',
      'tile_flag_ko',
      'tile_flag_ok',
      'tile_flag',
      'tile_mine_not_found',
      'tile_mine',
      'tile_unknown',
    ];
    for (int value = 0; value < 9; value++) {
      skinImages.add('tile_' + value.toString());
    }

    skinImages.forEach((image) => assets.add('assets/skins/default_' + image + '.png'));

    assets.add('assets/skins/default_empty.png');

    return assets;
  }

  @override
  Widget build(BuildContext context) {
    Data myProvider = Provider.of<Data>(context);

    if (!myProvider.assetsPreloaded) {
      List assets = getImagesAssets(myProvider);
      assets.forEach((asset) => precacheImage(AssetImage(asset), context));
      myProvider.updateAssetsPreloaded(true);
    }

    List<Widget> menuActions = [];

    if (myProvider.gameIsRunning) {
      menuActions = [
        TextButton(
          child: Container(
            child: Image(
              image: AssetImage('assets/icons/button_back.png'),
              fit: BoxFit.fill,
            ),
          ),
          onPressed: () => toast('Long press to quit game...'),
          onLongPress: () => GameUtils.quitGame(myProvider),
        ),
      ];
    }

    return Scaffold(
      appBar: AppBar(
        actions: menuActions,
      ),
      body: SafeArea(
        child: Center(
          child: myProvider.gameIsRunning
              ? Game.buildGameWidget(myProvider)
              : Parameters.buildParametersSelector(myProvider),
        ),
      ),
    );
  }
}