import 'package:firebase_core/firebase_core.dart';
import 'package:flare_flutter/flare_actor.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/notification/notification_manger.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/pages/land_page/land_page.dart';
import 'package:test_sa/new_views/pages/login_page.dart';

import '../../models/size_config.dart';

class SplashPage extends StatefulWidget {
  static const String routeName = '/splash_page';

  const SplashPage({Key key}) : super(key: key);

  @override
  State<SplashPage> createState() => _SplashPageState();
}

class _SplashPageState extends State<SplashPage> {
  SettingProvider _settingProvider;
  UserProvider _userProvider;

  @override
  void initState() {
    Firebase.initializeApp();
    NotificationManger.initialisation((notificationDetails) {
      // todo @sikander, check notifications payload, because notification model is different to need to check from backend
      // SystemNotificationModel notification = SystemNotificationModel.fromJson(json.decode(notificationDetails.payload));
      // if (notification.path == null || notification.path.isEmpty) return;
      // Navigator.pushNamed(context, notification.path, arguments: notification.requestId);
    }, (id, title, body, payload) async {});
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    SizeConfig.init(context);
    _settingProvider = Provider.of<SettingProvider>(context, listen: false);
    _userProvider = Provider.of<UserProvider>(context, listen: false);
    return Scaffold(
      body: SizedBox(
        width: MediaQuery.of(context).size.width / 1.1,
        child: FlareActor(
          "assets/rives/atoms_splash.flr",
          fit: BoxFit.contain,
          animation: "splash",
          callback: (animation) async {
            Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true);
            if (_settingProvider.isLoaded && (_settingProvider.user?.isLiveToken ?? false)) {
              _userProvider.user = _settingProvider.user;
              Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true);

              /// The below line for the new design
              // Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true);
            }
          },
        ),
      ).center,
    );
  }
}
