import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_login/flutter_login.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';

import '../../data/accountModel.dart';

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

  @override
  State<Login> createState() => _LoginState();
}

class _LoginState extends State<Login> {
  Duration get loginTime => const Duration(milliseconds: 2250);

  final Future<SharedPreferences> _storage = SharedPreferences.getInstance();

  String? checkInput(value){
    return (value ?? "").length < 5 ? "Eingabe zu kurz" : null;
  }


  @override
  Widget build(BuildContext context) {
    return FlutterLogin(
      logo: Image.file(File("assets/logo/icon.png")).image,

      userValidator: checkInput,
      passwordValidator: checkInput,

      onLogin: _authUser,
      onSignup: null,
      onRecoverPassword: _recoverPassword,

      theme: LoginTheme(
        primaryColor: Theme.of(context).primaryColor,
        cardTheme: const CardTheme(
          elevation: 10,
          shape: InputBorder.none,
        ),
      ),

      messages: LoginMessages(
        loginButton: "Anmelden",
        userHint: "Nutzername",
        passwordHint: "Passwort",
      ),

      disableCustomPageTransformer: true,

      headerWidget: const Padding(
        padding: EdgeInsets.only(bottom: 10),
        child: Center(
          child: Text(
            "Dies ist ein Inoffizieller Nextclient & Webuntis Client und wird nicht vom Marianum selbst betrieben.\nBitte bedenke, dass deine persönlichen Anmelde & Infodaten durch dritte, nicht vom Marianum betriebene, Systeme geleitet werden!",
            textAlign: TextAlign.center,
          ),
        ),
      ),

      footer: "Marianum Fulda - Die persönliche Schule!",
      title: "Marianum",

      hideForgotPasswordButton: true,
      userType: LoginUserType.name,

    );
  }

  Future<String?> _authUser(LoginData data) async {
    final SharedPreferences preferences = await _storage;
    preferences.setBool("loggedIn", true);
    preferences.setString("username", data.name);
    preferences.setString("password", data.password);

    debugPrint('Name: ${data.name}, Password: ${data.password}');
    return Future.delayed(loginTime).then((_) {
      Provider.of<AccountModel>(context, listen: false).login();
      return null;
    });
  }

  Future<String> _recoverPassword(String name) {
    return Future.delayed(loginTime).then((_) {
      return "Diese Funktion steht nicht zur Verfügung!";
    });
  }

}