import 'package:checker/base/base_screen.dart';
import 'package:checker/base/base_state.dart';
import 'package:checker/common.dart';
import 'package:checker/consts.dart';
import 'package:checker/db.dart';
import 'package:checker/screens/currencies.dart';
import 'package:checker/screens/languages.dart';
import 'package:checker/strings.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

class SettingsScreen extends BaseScreen {

  final bool returnToScanner;

  SettingsScreen(helper, app, this.returnToScanner) : super(helper, app);

  @override State createState() => new SettingsState(helper, app, returnToScanner);
}

class MenuItem {

  // Заголовок пункта меню и выбранное значение.
  String title, selectedValue;

  MenuItem(this.title, this.selectedValue);
}

class SettingsState extends BaseState<SettingsScreen> {

  List<MenuItem> menuItems = [
    new MenuItem('', ''),
    new MenuItem('', '')
  ];

  bool returnToScanner;

  SettingsState(SqliteHelper helper, String app, bool returnToScanner) {
    this.helper = helper;
    this.app = app;
    this.returnToScanner = returnToScanner;
  }

  @override Widget build(BuildContext ctx) {
    helper.getSettings().then((info) {
      setState(() {
        menuItems[0].title = StringsLocalization.currency();
        menuItems[1].title = StringsLocalization.locale();
        menuItems[0].selectedValue = info['currency'].toString();
        menuItems[1].selectedValue = info['locale'] == null ? Intl.defaultLocale : info['locale'].toString();
      });
    });
    return new WillPopScope(onWillPop: onWillPop, child: getMainWidget());
  }

  Widget getMainWidget() {
    return new Scaffold(appBar: getAppBar(),
        body: getScreenContent());
  }

  @override
  Widget getScreenContent() {
    return new Container(
        margin: new EdgeInsets.only(top: 16.0),
        child: new ListView(children: getSettings()));
  }

  @override
  List<Widget> getMenuButtons() {
    return null;
  }

  List<Widget> getSettings() {
    List<Widget> widgets = new List();
    for (int i = 0; i < menuItems.length; i++) {
      if (menuItems[i].selectedValue != '') {
        widgets.add(getSettingsItem(() => onPressed(menuItems.indexOf(menuItems[i])),
            menuItems[i].title,
            i == 0 ? getCurrencyTitle(int.parse(menuItems[i].selectedValue)) : getLocaleTitle(menuItems[i].selectedValue)));
      }
    }
    return widgets;
  }

  Widget getSettingsItem(VoidCallback onPressed, String title, String value) {
    return new Container(
        height: 56.0,
        padding: new EdgeInsets.only(left: 8.0),
        child: (new FlatButton(
            onPressed: onPressed,
            child: new Row(children: <Widget>[
              new Expanded(child: new Text(title, style: new TextStyle(
                  fontWeight: FontWeight.w600,
                  color: faqGrey,
                  fontSize: 14.0))),
              new Text(value,
                  style: new TextStyle(
                      fontWeight: FontWeight.w400,
                      color: faqGrey,
                      fontSize: 14.0)),
              getArrow()
            ]))));
  }

  void onPressed(int position) {
    switch (position) {
      case 0 :
        return pushRoute(context, new CurrenciesScreen(helper, app));
      case 1 :
        return pushRoute(context, new LanguagesScreen(helper, app));
    }
  }

  Widget getArrow() {
    return new Container(margin: new EdgeInsets.only(left: 8.0),
        child: new Image.asset(settings_arrow_png, height: 42.0));
  }

  @override
  String getTitle() {
    return StringsLocalization.settings();
  }

  onWillPop() {
    if(returnToScanner) {
      return startScanner(context, app, helper);
    } else {
      return true;
    }
  }
}