import 'dart:developer';
import 'dart:math' as math;

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/decorations_helper.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/main.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:mohem_flutter_app/ui/marathon/widgets/countdown_timer_main_screen.dart';
import 'package:provider/provider.dart';

// It is used to pass a dummy time to test Marathon
int dummyTime = DateTime.now().millisecondsSinceEpoch + 8690;

class MarathonBanner extends StatelessWidget {
  const MarathonBanner({Key? key}) : super(key: key);

  Widget getUnPrivilegedMarathon(BuildContext context) {
    return Container(
      decoration: MyDecorations.shadowDecoration,
      height: isTablet ? MediaQuery.of(context).size.height * 0.17 : MediaQuery.of(context).size.height * 0.11,
      clipBehavior: Clip.antiAlias,
      child: Stack(
        children: <Widget>[
          Transform(
            alignment: Alignment.center,
            transform: Matrix4.rotationY(
              AppState().isArabic(context) ? math.pi : 0,
            ),
            child: SvgPicture.asset(
              "assets/images/marathon_banner_bg.svg",
              fit: BoxFit.fill,
              width: double.infinity,
            ),
          ),
          AppState().isArabic(context)
              ? Positioned(
                  right: -15,
                  top: -10,
                  child: Transform.rotate(
                    angle: 10,
                    child: Container(
                      width: isTablet ? 70 : 65,
                      height: isTablet ? 40 : 32,
                      color: MyColors.darkDigitColor,
                    ),
                  ),
                )
              : Positioned(
                  left: -20,
                  top: -10,
                  child: Transform.rotate(
                    angle: 15,
                    child: Container(
                      width: isTablet ? 70 : 65,
                      height: isTablet ? 40 : 32,
                      color: MyColors.darkDigitColor,
                    ),
                  ),
                ),
          SizedBox(
            width: double.infinity,
            height: double.infinity,
            child: Row(
              children: <Widget>[
                const Expanded(
                  flex: 3,
                  child: SizedBox(
                    width: double.infinity,
                    height: double.infinity,
                  ),
                ),
                Expanded(
                  flex: AppState().isArabic(context) ? 4 : 5,
                  child: SizedBox(
                    width: double.infinity,
                    height: double.infinity,
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.start,
                      children: <Widget>[
                        Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          crossAxisAlignment: CrossAxisAlignment.start,
                          mainAxisSize: MainAxisSize.min,
                          children: <Widget>[
                            AppState().isArabic(context) ? 0.height : 5.height,
                            Text(
                              LocaleKeys.getReadyForContest.tr(),
                              style: TextStyle(
                                fontSize: isTablet ? 20 : 11,
                                fontStyle: FontStyle.italic,
                                fontWeight: FontWeight.w600,
                                color: MyColors.white.withOpacity(0.83),
                                letterSpacing: -0.4,
                              ),
                            ),
                            Text(
                              LocaleKeys.brainMarathon.tr(),
                              style: TextStyle(
                                fontStyle: FontStyle.italic,
                                fontSize: isTablet ? 30 : 19,
                                fontWeight: FontWeight.bold,
                                color: MyColors.white.withOpacity(0.83),
                                height: 32 / 22,
                              ),
                            ),
                          ],
                        ).paddingOnly(
                          left: AppState().isArabic(context) ? 12 : 3,
                          right: AppState().isArabic(context) ? 3 : 12,
                        )
                      ],
                    ),
                  ),
                ),
              ],
            ),
          ),
          AppState().isArabic(context)
              ? Align(
                  alignment: Alignment.topRight,
                  child: SizedBox(
                    height: isTablet ? 30 : 20,
                    width: isTablet ? 45 : 35,
                    child: Transform.rotate(
                      angle: math.pi / 4.5,
                      child: Text(
                        LocaleKeys.brainMarathon.tr(),
                        textAlign: TextAlign.center,
                        maxLines: 2,
                        style: TextStyle(
                          color: MyColors.white,
                          fontWeight: FontWeight.bold,
                          fontSize: isTablet ? 8 : 6,
                          height: 1.2,
                        ),
                      ),
                    ),
                  ),
                ).paddingOnly(top: 5)
              : Align(
                  alignment: Alignment.topLeft,
                  child: SizedBox(
                    height: isTablet ? 30 : 20,
                    width: isTablet ? 45 : 35,
                    child: Transform.rotate(
                      angle: -math.pi / 4.5,
                      child: Text(
                        LocaleKeys.brainMarathon.tr(),
                        textAlign: TextAlign.center,
                        maxLines: 2,
                        style: TextStyle(
                          color: MyColors.kWhiteColor,
                          fontWeight: FontWeight.bold,
                          fontSize: isTablet ? 8 : 6,
                          height: 1.2,
                        ),
                      ),
                    ),
                  ),
                ).paddingOnly(top: 5),
          Container(
            height: double.infinity,
            width: double.infinity,
            color: Colors.black.withOpacity(0.6),
            child: const Icon(
              Icons.lock_rounded,
              color: MyColors.lightGreyIconColor,
            ),
          ),
        ],
      ),
    );
  }

  Widget getNoUpcomingMarathonWidget(BuildContext context) {
    return Container(
      decoration: MyDecorations.shadowDecoration,
      height: isTablet ? MediaQuery.of(context).size.height * 0.17 : MediaQuery.of(context).size.height * 0.11,
      clipBehavior: Clip.antiAlias,
      child: Stack(
        children: <Widget>[
          Transform(
            alignment: Alignment.center,
            transform: Matrix4.rotationY(
              AppState().isArabic(context) ? math.pi : 0,
            ),
            child: SvgPicture.asset(
              "assets/images/marathon_banner_bg.svg",
              fit: BoxFit.fill,
              width: double.infinity,
            ),
          ),
          AppState().isArabic(context)
              ? Positioned(
                  right: -15,
                  top: -10,
                  child: Transform.rotate(
                    angle: 10,
                    child: Container(
                      width: isTablet ? 70 : 65,
                      height: isTablet ? 40 : 32,
                      color: MyColors.darkDigitColor,
                    ),
                  ),
                )
              : Positioned(
                  left: -20,
                  top: -10,
                  child: Transform.rotate(
                    angle: 15,
                    child: Container(
                      width: isTablet ? 70 : 65,
                      height: isTablet ? 40 : 32,
                      color: MyColors.darkDigitColor,
                    ),
                  ),
                ),
          SizedBox(
            width: double.infinity,
            height: double.infinity,
            child: Row(
              children: <Widget>[
                const Expanded(
                  flex: 3,
                  child: SizedBox(
                    width: double.infinity,
                    height: double.infinity,
                  ),
                ),
                Expanded(
                  flex: AppState().isArabic(context) ? 4 : 5,
                  child: SizedBox(
                    width: double.infinity,
                    height: double.infinity,
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.start,
                      children: <Widget>[
                        Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          crossAxisAlignment: CrossAxisAlignment.start,
                          mainAxisSize: MainAxisSize.min,
                          children: <Widget>[
                            AppState().isArabic(context) ? 0.height : 5.height,
                            Text(
                              LocaleKeys.noUpcoming.tr(),
                              style: TextStyle(
                                fontSize: isTablet ? 20 : 11,
                                fontStyle: FontStyle.italic,
                                fontWeight: FontWeight.w600,
                                color: MyColors.white.withOpacity(0.83),
                                letterSpacing: -0.4,
                              ),
                            ),
                            Text(
                              LocaleKeys.brainMarathon.tr(),
                              style: TextStyle(
                                fontStyle: FontStyle.italic,
                                fontSize: isTablet ? 30 : 19,
                                fontWeight: FontWeight.bold,
                                color: MyColors.white.withOpacity(0.83),
                                height: 32 / 22,
                              ),
                            ),
                            Text(
                              LocaleKeys.youCanPlayDemo.tr(),
                              style: TextStyle(
                                fontSize: isTablet ? 20 : 11,
                                fontStyle: FontStyle.italic,
                                fontWeight: FontWeight.w600,
                                color: MyColors.white.withOpacity(0.83),
                                letterSpacing: -0.4,
                              ),
                            ),
                          ],
                        ).paddingOnly(
                          left: AppState().isArabic(context) ? 12 : 3,
                          right: AppState().isArabic(context) ? 3 : 12,
                        )
                      ],
                    ),
                  ),
                ),
              ],
            ),
          ),
          AppState().isArabic(context)
              ? Align(
                  alignment: Alignment.topRight,
                  child: SizedBox(
                    height: isTablet ? 30 : 20,
                    width: isTablet ? 45 : 35,
                    child: Transform.rotate(
                      angle: math.pi / 4.5,
                      child: Text(
                        LocaleKeys.brainMarathon.tr(),
                        textAlign: TextAlign.center,
                        maxLines: 2,
                        style: TextStyle(
                          color: MyColors.white,
                          fontWeight: FontWeight.bold,
                          fontSize: isTablet ? 8 : 6,
                          height: 1.2,
                        ),
                      ),
                    ),
                  ),
                ).paddingOnly(top: 5)
              : Align(
                  alignment: Alignment.topLeft,
                  child: SizedBox(
                    height: isTablet ? 30 : 20,
                    width: isTablet ? 45 : 35,
                    child: Transform.rotate(
                      angle: -math.pi / 4.5,
                      child: Text(
                        LocaleKeys.brainMarathon.tr(),
                        textAlign: TextAlign.center,
                        maxLines: 2,
                        style: TextStyle(
                          color: MyColors.kWhiteColor,
                          fontWeight: FontWeight.bold,
                          fontSize: isTablet ? 8 : 6,
                          height: 1.2,
                        ),
                      ),
                    ),
                  ),
                ).paddingOnly(top: 5),
        ],
      ),
    ).onPress(() {
      Navigator.pushNamed(context, AppRoutes.marathonIntroScreen);
    });
  }

  @override
  Widget build(BuildContext context) {
    MarathonProvider provider = context.read<MarathonProvider>();

    return !provider.isPrivilegedWithMarathon
        ? getUnPrivilegedMarathon(context)
        : provider.isUpComingMarathon
            ? Container(
                decoration: MyDecorations.shadowDecoration,
                height: isTablet ? MediaQuery.of(context).size.height * 0.17 : MediaQuery.of(context).size.height * 0.11,
                clipBehavior: Clip.antiAlias,
                child: Stack(
                  children: <Widget>[
                    Transform(
                      alignment: Alignment.center,
                      transform: Matrix4.rotationY(
                        AppState().isArabic(context) ? math.pi : 0,
                      ),
                      child: SvgPicture.asset(
                        "assets/images/marathon_banner_bg.svg",
                        fit: BoxFit.fill,
                        width: double.infinity,
                      ),
                    ),
                    AppState().isArabic(context)
                        ? Positioned(
                            right: -15,
                            top: -10,
                            child: Transform.rotate(
                              angle: 10,
                              child: Container(
                                width: isTablet ? 70 : 65,
                                height: isTablet ? 40 : 32,
                                color: MyColors.darkDigitColor,
                              ),
                            ),
                          )
                        : Positioned(
                            left: -20,
                            top: -10,
                            child: Transform.rotate(
                              angle: 15,
                              child: Container(
                                width: isTablet ? 70 : 65,
                                height: isTablet ? 40 : 32,
                                color: MyColors.darkDigitColor,
                              ),
                            ),
                          ),
                    SizedBox(
                      width: double.infinity,
                      height: double.infinity,
                      child: Row(
                        children: <Widget>[
                          const Expanded(
                            flex: 3,
                            child: SizedBox(
                              width: double.infinity,
                              height: double.infinity,
                            ),
                          ),
                          Expanded(
                            flex: AppState().isArabic(context) ? 4 : 5,
                            child: SizedBox(
                              width: double.infinity,
                              height: double.infinity,
                              child: Row(
                                mainAxisAlignment: MainAxisAlignment.start,
                                children: <Widget>[
                                  Column(
                                    mainAxisAlignment: MainAxisAlignment.center,
                                    crossAxisAlignment: CrossAxisAlignment.start,
                                    mainAxisSize: MainAxisSize.min,
                                    children: <Widget>[
                                      AppState().isArabic(context) ? 0.height : 5.height,
                                      Text(
                                        LocaleKeys.getReadyForContest.tr(),
                                        style: TextStyle(
                                          fontSize: isTablet ? 20 : 11,
                                          fontStyle: FontStyle.italic,
                                          fontWeight: FontWeight.w600,
                                          color: MyColors.white.withOpacity(0.83),
                                          letterSpacing: -0.4,
                                        ),
                                      ),
                                      Flexible(
                                        child: Text(
                                          (AppState().isArabic(context) ? provider.marathonDetailModel.titleAr ?? "" : provider.marathonDetailModel.titleEn ?? "").trimString(15),
                                          overflow: TextOverflow.ellipsis,
                                          style: TextStyle(
                                            fontStyle: FontStyle.italic,
                                            fontSize: isTablet ? 30 : 19,
                                            fontWeight: FontWeight.bold,
                                            color: MyColors.white.withOpacity(0.83),
                                            height: 32 / 22,
                                          ),
                                        ),
                                      ),
                                      isTablet ? 10.height : 3.height,
                                      CountdownTimerForMainScreen(
                                        timeToMarathon: DateTime.parse(provider.marathonDetailModel.startTime!).millisecondsSinceEpoch,
                                        provider: provider,
                                      ),
                                    ],
                                  ).paddingOnly(
                                    left: AppState().isArabic(context) ? 12 : 3,
                                    right: AppState().isArabic(context) ? 3 : 12,
                                  )
                                ],
                              ),
                            ),
                          ),
                        ],
                      ),
                    ),
                    AppState().isArabic(context)
                        ? Align(
                            alignment: Alignment.topRight,
                            child: SizedBox(
                              height: isTablet ? 30 : 20,
                              width: isTablet ? 45 : 35,
                              child: Transform.rotate(
                                angle: math.pi / 4.5,
                                child: Text(
                                  LocaleKeys.brainMarathon.tr(),
                                  textAlign: TextAlign.center,
                                  maxLines: 2,
                                  style: TextStyle(
                                    color: MyColors.white,
                                    fontWeight: FontWeight.bold,
                                    fontSize: isTablet ? 8 : 6,
                                    height: 1.2,
                                  ),
                                ),
                              ),
                            ),
                          ).paddingOnly(top: 5)
                        : Align(
                            alignment: Alignment.topLeft,
                            child: SizedBox(
                              height: isTablet ? 30 : 20,
                              width: isTablet ? 45 : 35,
                              child: Transform.rotate(
                                angle: -math.pi / 4.5,
                                child: Text(
                                  LocaleKeys.brainMarathon.tr(),
                                  textAlign: TextAlign.center,
                                  maxLines: 2,
                                  style: TextStyle(
                                    color: MyColors.kWhiteColor,
                                    fontWeight: FontWeight.bold,
                                    fontSize: isTablet ? 8 : 6,
                                    height: 1.2,
                                  ),
                                ),
                              ),
                            ),
                          ).paddingOnly(top: 5),
                    !AppState().isArabic(context)
                        ? Positioned(
                            right: 0,
                            bottom: 0,
                            child: RotatedBox(
                              quarterTurns: 4,
                              child: SvgPicture.asset("assets/images/arrow_next.svg", color: MyColors.whiteColor),
                            ).paddingAll(isTablet ? 20 : 15),
                          )
                        : Positioned(
                            bottom: 0,
                            left: 0,
                            child: RotatedBox(
                              quarterTurns: 2,
                              child: SvgPicture.asset("assets/images/arrow_next.svg", color: MyColors.whiteColor),
                            ).paddingAll(isTablet ? 20 : 15),
                          ),
                  ],
                ).onPress(() async {
                  int remainingTimeInMinutes = DateTime.parse(provider.marathonDetailModel.startTime!).difference(DateTime.now()).inMinutes;

                  if (remainingTimeInMinutes > 5 && provider.marathonDetailModel.sponsors != null && provider.marathonDetailModel.sponsors!.isNotEmpty) {
                    Utils.showLoading(context);
                    try {
                      await provider.initializeVideoPlayer().then((_) {
                        Utils.hideLoading(context);
                        provider.startTimerForSponsorVideo();
                        Navigator.pushNamed(context, AppRoutes.marathonSponsorVideoScreen);
                      });
                    } catch (e) {
                      if (kDebugMode) {
                        log("Error in VideoPlayer: ${e.toString()}");
                      }
                      Utils.hideLoading(context);
                      Navigator.pushNamed(context, AppRoutes.marathonIntroScreen);
                    }
                  } else {
                    Navigator.pushNamed(context, AppRoutes.marathonIntroScreen);
                  }
                }),
              )
            : getNoUpcomingMarathonWidget(context);
  }
}
