import 'dart:developer';

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

import '../../api/marianumcloud/talk/room/getRoom.dart';
import '../../api/marianumcloud/talk/room/getRoomParams.dart';
import '../../model/accountData.dart';
import '../../model/accountModel.dart';

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

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

class _LoginState extends State<Login> {
  bool displayDisclaimerText = true;

  String? _checkInput(value)=> (value ?? '').length == 0 ? 'Eingabe erforderlich' : null;

  Future<String?> _login(LoginData data) async {
    await AccountData().removeData();

    try {
      await AccountData().setData(data.name.toLowerCase(), data.password);
      await GetRoom(
        GetRoomParams(
          includeStatus: false,
        ),
      ).run().then((value) async {
        await AccountData().setData(data.name.toLowerCase(), data.password);
        setState(() {
          displayDisclaimerText = false;
        });
      });
    } catch(e) {
      await AccountData().removeData();
      log(e.toString());
      return 'Benutzername oder Password falsch! (${e.toString()})';
    }

    await Future.delayed(const Duration(seconds: 1));
    return null;
  }

  Future<String> _resetPassword(String name) => Future.delayed(Duration.zero).then((_) => 'Diese Funktion steht nicht zur Verfügung!');

  @override
  Widget build(BuildContext context) => FlutterLogin(
      logo: Image.asset('assets/logo/icon.png').image,

      userValidator: _checkInput,
      passwordValidator: _checkInput,
      onSubmitAnimationCompleted: () => Provider.of<AccountModel>(context, listen: false).setState(AccountModelState.loggedIn),

      onLogin: _login,
      onSignup: null,

      onRecoverPassword: _resetPassword,
      hideForgotPasswordButton: true,

      theme: LoginTheme(
        primaryColor: Theme.of(context).primaryColor,
        accentColor: Colors.white,
        errorColor: Theme.of(context).primaryColor,
        footerBottomPadding: 10,
        textFieldStyle: const TextStyle(
          fontWeight: FontWeight.w500
        ),
        cardTheme: const CardTheme(
          elevation: 10,
        ),
      ),

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

      disableCustomPageTransformer: true,

      headerWidget: Padding(
        padding: const EdgeInsets.only(bottom: 30),
        child: Center(
          child: Visibility(
            visible: displayDisclaimerText,
            child: const Text(
            'Dies ist ein Inoffizieller Nextcloud & Webuntis Client und wird nicht vom Marianum selbst betrieben.\nKeinerlei Gewähr für Vollständigkeit, Richtigkeit und Aktualität!',
            textAlign: TextAlign.center,
            ),
          ),
        ),
      ),

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

      userType: LoginUserType.name,
    );
}