import 'package:appinio_swiper/appinio_swiper.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/decorations_helper.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/models/marathon_question_model.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:provider/provider.dart';

class QuestionCard extends StatefulWidget {
  final MarathonProvider provider;

  const QuestionCard({Key? key, required this.provider}) : super(key: key);

  @override
  State<QuestionCard> createState() => _QuestionCardState();
}

class _QuestionCardState extends State<QuestionCard> {
  final List<QuestionContent> questionCards = <QuestionContent>[];

  @override
  void initState() {
    _loadCards();
    super.initState();
  }

  void _loadCards() {
    for (DummyQuestionModel question in questions) {
      questionCards.add(
        QuestionContent(
          question: question,
          provider: widget.provider,
        ),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      child: SizedBox(
        height: 420,
        width: double.infinity,
        child: Consumer<MarathonProvider>(
          builder: (BuildContext context, MarathonProvider provider, _) {
            return AppinioSwiper(
              padding: EdgeInsets.zero,
              isDisabled: true,
              controller: provider.swiperController,
              unswipe: (int index, AppinioSwiperDirection direction) {},
              cards: questionCards,
              onSwipe: (int index, AppinioSwiperDirection direction) {
                if (direction == AppinioSwiperDirection.left) {
                  provider.startTimer(context);
                }
              },
            );
          },
        ),
      ),
    );
  }
}

class QuestionContent extends StatelessWidget {
  final DummyQuestionModel question;
  final MarathonProvider provider;

  const QuestionContent({
    Key? key,
    required this.question,
    required this.provider,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(10),
        color: CupertinoColors.white,
        boxShadow: <BoxShadow>[
          BoxShadow(
            color: CupertinoColors.systemGrey.withOpacity(0.2),
            spreadRadius: 3,
            blurRadius: 7,
            offset: const Offset(0, 3),
          )
        ],
      ),
      alignment: Alignment.center,
      child: Column(
        children: <Widget>[
          Container(
            height: 78,
            width: double.infinity,
            decoration: const BoxDecoration(
              gradient: LinearGradient(
                transform: GradientRotation(.83),
                begin: Alignment.topRight,
                end: Alignment.bottomLeft,
                colors: <Color>[
                  MyColors.gradiantEndColor,
                  MyColors.gradiantStartColor,
                ],
              ),
              borderRadius: BorderRadius.only(
                topLeft: Radius.circular(10),
                topRight: Radius.circular(10),
              ),
            ),
            child: const Center(
              child: Padding(
                padding: EdgeInsets.symmetric(horizontal: 13),
                child: Text(
                  "What is the capital of Saudi Arabia?",
                  style: TextStyle(
                    color: MyColors.white,
                    fontSize: 16,
                    fontWeight: FontWeight.w600,
                  ),
                ),
              ),
            ),
          ),
          AnswerContent(question: question, provider: provider),
        ],
      ),
    );
  }
}

class AnswerContent extends StatelessWidget {
  final DummyQuestionModel question;
  final MarathonProvider provider;

  const AnswerContent({Key? key, required this.question, required this.provider}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: const EdgeInsets.all(13),
      decoration: const BoxDecoration(
        color: MyColors.kWhiteColor,
        borderRadius: BorderRadius.only(
          bottomLeft: Radius.circular(10),
          bottomRight: Radius.circular(10),
        ),
      ),
      child: Column(
        mainAxisSize: MainAxisSize.min,
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          InkWell(
            onTap: () {
              if (provider.currentQuestionNumber == 9) {
                provider.cancelTimer();
                provider.resetValues();
                Navigator.pushReplacementNamed(
                  context,
                  AppRoutes.marathonWinnerSelection,
                );
                return;
              }
              provider.cancelTimer();
              provider.startTimer(context);
              provider.swipeCardLeft();
            },
            child: Container(
              height: 60,
              width: MediaQuery.of(context).size.width - 75,
              alignment: Alignment.centerLeft,
              decoration: MyDecorations.answerContainerDecoration,
              child: Center(
                child: Text(
                  question.opt1!,
                  style: const TextStyle(
                    color: MyColors.darkTextColor,
                    fontWeight: FontWeight.w600,
                    fontSize: 16,
                  ),
                ),
              ),
            ),
          ),
          const SizedBox(height: 15),
          InkWell(
            onTap: () {
              if (provider.currentQuestionNumber == 9) {
                provider.cancelTimer();
                provider.resetValues();
                Navigator.pushReplacementNamed(
                  context,
                  AppRoutes.marathonWinnerSelection,
                );
                return;
              }
              provider.cancelTimer();
              provider.startTimer(context);
              provider.swipeCardLeft();
            },
            child: Container(
              height: 60,
              width: MediaQuery.of(context).size.width - 75,
              alignment: Alignment.centerLeft,
              decoration: MyDecorations.answerContainerDecoration,
              child: Center(
                child: Text(
                  question.opt2!,
                  style: const TextStyle(
                    color: MyColors.darkTextColor,
                    fontWeight: FontWeight.w600,
                    fontSize: 16,
                  ),
                ),
              ),
            ),
          ),
          const SizedBox(height: 15),
          InkWell(
            onTap: () {
              if (provider.currentQuestionNumber == 9) {
                provider.cancelTimer();
                provider.resetValues();
                Navigator.pushReplacementNamed(
                  context,
                  AppRoutes.marathonWinnerSelection,
                );
                return;
              }
              provider.cancelTimer();
              provider.startTimer(context);
              provider.swipeCardLeft();
            },
            child: Container(
              height: 60,
              width: MediaQuery.of(context).size.width - 75,
              alignment: Alignment.centerLeft,
              decoration: MyDecorations.answerContainerDecoration,
              child: Center(
                child: Text(
                  question.opt3!,
                  style: const TextStyle(
                    color: MyColors.darkTextColor,
                    fontWeight: FontWeight.w600,
                    fontSize: 16,
                  ),
                ),
              ),
            ),
          ),
          const SizedBox(height: 15),
          InkWell(
            onTap: () {
              if (provider.currentQuestionNumber == 9) {
                provider.cancelTimer();
                provider.resetValues();
                Navigator.pushReplacementNamed(
                  context,
                  AppRoutes.marathonWinnerSelection,
                );
                return;
              }
              provider.cancelTimer();
              provider.startTimer(context);
              provider.swipeCardLeft();
            },
            child: Container(
              height: 60,
              width: MediaQuery.of(context).size.width - 75,
              alignment: Alignment.centerLeft,
              decoration: MyDecorations.answerContainerDecoration,
              child: Center(
                child: Text(
                  question.opt3!,
                  style: const TextStyle(
                    color: MyColors.darkTextColor,
                    fontWeight: FontWeight.w600,
                    fontSize: 16,
                  ),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}
