import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/services/permission/permission_service.dart';
import 'package:diplomaticquarterapp/theme/theme_notifier.dart';
import 'package:diplomaticquarterapp/theme/theme_value.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:provider/provider.dart';
import 'package:screen/screen.dart';

class GeneralSettings extends StatefulWidget {
  @override
  _GeneralSettings createState() => _GeneralSettings();
}

class _GeneralSettings extends State<GeneralSettings>
    with TickerProviderStateMixin {
  var themeNotifier;
  int blindValue = 0;
  bool vibration = false;
  bool accsibility = false;
  bool camera = false;
  bool location = false;
  var sharedPref = new AppSharedPreferences();
  var permission = new PermissionService();
  LocationPermission locationPermission;
  var mediaQueryData;
  @override
  void initState() {
    this.getValues();
    super.initState();
  }

  Widget build(BuildContext context) {
    mediaQueryData = MediaQuery.of(context);
    themeNotifier = Provider.of<ThemeNotifier>(context);
    return Container(
        child: ListView(scrollDirection: Axis.vertical, children: <Widget>[
      Container(
        color: Theme.of(context).scaffoldBackgroundColor,
        padding: EdgeInsets.all(10),
        child: AppText(
          TranslationBase.of(context).modes,
          fontWeight: FontWeight.bold,
        ),
      ),
      Container(
          color: Theme.of(context).scaffoldBackgroundColor,
          padding: EdgeInsets.all(10),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              AppText(TranslationBase.of(context).vibration),
              Switch(
                value: vibration,
                onChanged: (value) {
                  setState(() {
                    vibration = value;
                  });
                  setVibration(value);
                },
                activeTrackColor: Colors.lightGreenAccent,
                activeColor: Colors.green,
              )
            ],
          )),
      Container(
          color: Theme.of(context).scaffoldBackgroundColor,
          padding: EdgeInsets.all(10),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              AppText(TranslationBase.of(context).accessibility),
              Switch(
                value: accsibility,
                onChanged: (value) {
                  setState(() {
                    accsibility = value;
                  });
                },
                activeTrackColor: Colors.lightGreenAccent,
                activeColor: Colors.green,
              )
            ],
          )),
      Container(
        color: Theme.of(context).scaffoldBackgroundColor,
        padding: EdgeInsets.all(10),
        child: AppText(
          TranslationBase.of(context).blindMode,
          fontWeight: FontWeight.bold,
        ),
      ),
      new Container(
          color: Theme.of(context).scaffoldBackgroundColor,
          padding: EdgeInsets.all(8.0),
          child: new Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                new Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        new Text(
                          TranslationBase.of(context).offTheme,
                          style: new TextStyle(fontSize: 16.0),
                        ),
                        Radio(
                          value: 0,
                          groupValue: blindValue,
                          onChanged: (value) {
                            setState(() => {this.blindValue = value});
                            setTheme(value);
                          },
                        ),
                      ],
                    ),
                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        new Text(
                          TranslationBase.of(context).invertTheme,
                          style: new TextStyle(
                            fontSize: 16.0,
                          ),
                        ),
                        new Radio(
                          value: 1,
                          groupValue: blindValue,
                          onChanged: (value) {
                            setState(() => {this.blindValue = value});
                            setTheme(value);
                          },
                        )
                      ],
                    ),
                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        new Text(
                          TranslationBase.of(context).dimTheme,
                          style: new TextStyle(fontSize: 16.0),
                        ),
                        new Radio(
                          value: 2,
                          groupValue: blindValue,
                          onChanged: (value) {
                            setState(() => {this.blindValue = value});
                            setTheme(value);
                          },
                        ),
                      ],
                    ),
                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        new Text(
                          TranslationBase.of(context).bwTheme,
                          style: new TextStyle(fontSize: 16.0),
                        ),
                        new Radio(
                          value: 3,
                          groupValue: blindValue,
                          onChanged: (value) {
                            setState(() => {this.blindValue = value});

                            setTheme(value);
                          },
                        ),
                      ],
                    ),
                  ],
                )
              ])),
      Container(
        color: Theme.of(context).scaffoldBackgroundColor,
        padding: EdgeInsets.all(10),
        child: AppText(
          TranslationBase.of(context).permissions,
          fontWeight: FontWeight.bold,
        ),
      ),
      Container(
          color: Theme.of(context).scaffoldBackgroundColor,
          padding: EdgeInsets.all(10),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              AppText(TranslationBase.of(context).cameraPermission),
              Switch(
                value: camera,
                onChanged: (value) {
                  setState(() {
                    camera = value;
                  });
                  this.permission.openSettings();
                },
                activeTrackColor: Colors.lightGreenAccent,
                activeColor: Colors.green,
              )
            ],
          )),
      Container(
          color: Theme.of(context).scaffoldBackgroundColor,
          padding: EdgeInsets.all(10),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              AppText(TranslationBase.of(context).locationPermission),
              Switch(
                value: location,
                onChanged: (value) {
                  if (value == true) {
                    Navigator.pop(context);
                    this.setLocationPermission();
                  } else {
                    Geolocator.openLocationSettings();
                  }
                },
                activeTrackColor: Colors.lightGreenAccent,
                activeColor: Colors.green,
              )
            ],
          ))
    ]));
  }

  setLocationPermission() async {
    locationPermission = await Geolocator.checkPermission();
    if (locationPermission == LocationPermission.denied) {
      locationPermission = await Geolocator.requestPermission();
      if (locationPermission != LocationPermission.denied) {
        setState(() {
          location = true;
        });
      } else {
        this.location = false;
      }
    } else {
      Geolocator.openLocationSettings();
      this.location = true;
    }
  }

  setTheme(value) async {
    switch (value) {
      case 0:
        {
          themeNotifier.setTheme(await getTheme(value));
          Screen.setBrightness(1.0);
        }
        break;
      case 1:
        {
          themeNotifier.setTheme(await getTheme(value));
        }

        break;
      case 2:
        themeNotifier.setTheme(await getTheme(value));
        Screen.setBrightness(0.01);
        break;
      case 3:
        {
          themeNotifier.setTheme(await getTheme(value));
          Screen.setBrightness(1.0);
        }
        break;
      default:
        {
          themeNotifier.setTheme(await getTheme(value));
          Screen.setBrightness(1.0);
        }
        break;
    }
    permission.setTheme(value);
  }

  setVibration(value) {
    permission.setVibrationPermission(value);
  }

  setAccisibility() {
    if (!accsibility) {}
    // permission.setVibrationPermission(value);
  }

  getValues() async {
    if (permission.isThemeEnabled() != null) {
      blindValue =
          permission.isThemeEnabled() == null ? 0 : permission.isThemeEnabled();
      vibration = permission.isVibrationEnabled() == null
          ? false
          : permission.isVibrationEnabled();
      // accsibility = mediaQueryData.accessibleNavigation;
      //setTheme(blindValue);
    }
    var camera = await this.permission.isCameraEnabled();
    var location = await this.permission.isLocationEnabled();
    setState(() {
      this.camera = camera;
      this.location = location;
    });
  }

  getTheme(value) async {
    if (value == 1) {
      return invertThemes(
          fontName:
              Provider.of<ProjectViewModel>(context, listen: false).isArabic
                  ? 'Cairo'
                  : 'WorkSans');
    } else if (value == 3) {
      return bwThemes(
          fontName:
              Provider.of<ProjectViewModel>(context, listen: false).isArabic
                  ? 'Cairo'
                  : 'WorkSans');
    } else {
      return defaultTheme(
          fontName:
              Provider.of<ProjectViewModel>(context, listen: false).isArabic
                  ? 'Cairo'
                  : 'WorkSans');
    }
  }
}
