import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:hmg_nurses/classes/colors.dart';
import 'package:hmg_nurses/classes/enums.dart';
import 'package:hmg_nurses/classes/size_config.dart';
import 'package:hmg_nurses/generated/locale_keys.g.dart';
import 'package:hmg_nurses/ui/login/login_vm.dart';
import 'package:local_auth/local_auth.dart';

class VerificationMethodsList extends StatefulWidget {
  final AuthMethodTypes authMethodType;
  final Function(AuthMethodTypes type, bool isActive)? authenticateUser;
  final Function? onShowMore;
  final LoginViewModel loginViewModel;

  const VerificationMethodsList({Key? key, required this.authMethodType, this.authenticateUser, this.onShowMore, required this.loginViewModel}) : super(key: key);

  @override
  VerificationMethodsListState createState() => VerificationMethodsListState();
}

class VerificationMethodsListState extends State<VerificationMethodsList> {
  final LocalAuthentication auth = LocalAuthentication();

  @override
  Widget build(BuildContext context) {
    switch (widget.authMethodType) {
      case AuthMethodTypes.whatsApp:
        return MethodTypeCard(
          assetPath: 'assets/images/login/verify_whatsapp.svg',
          onTap: () => {widget.authenticateUser!(AuthMethodTypes.whatsApp, true)},
          label: LocaleKeys.verifyThroughWhatsapp.tr(),
        );
      case AuthMethodTypes.sms:
        return MethodTypeCard(
          assetPath: "assets/images/login/verify_sms.svg",
          onTap: () => {widget.authenticateUser!(AuthMethodTypes.sms, true)},
          label: LocaleKeys.verifyThroughSMS.tr(),
        );
      case AuthMethodTypes.fingerPrint:
        return MethodTypeCard(
          assetPath: 'assets/images/login/verify_thumb.svg',
          onTap: () => {widget.authenticateUser!(AuthMethodTypes.fingerPrint, true)},
          label: LocaleKeys.verifyThroughFingerprint.tr(),
        );
      case AuthMethodTypes.faceID:
        return MethodTypeCard(
          assetPath: 'assets/images/login/verify_face.svg',
          onTap: () => {widget.authenticateUser!(AuthMethodTypes.faceID, true)},
          label: LocaleKeys.verifyThroughFace.tr(),
        );

      default:
        return MethodTypeCard(
          assetPath: 'assets/images/login/more_icon.png',
          onTap: () {
            widget.onShowMore!();
          },
          isSvg: false,
          label: LocaleKeys.moreVerificationOpts.tr(),
          height: 0,
        );
    }
  }
}

class MethodTypeCard extends StatelessWidget {
  const MethodTypeCard({
    Key? key,
    required this.assetPath,
    required this.onTap,
    required this.label,
    this.height = 20,
    this.isSvg = true,
  }) : super(key: key);
  final String assetPath;
  final GestureTapCallback onTap;
  final String label;
  final double height;
  final bool isSvg;

  @override
  Widget build(BuildContext context) {
    double cardHeight = SizeConfig.heightMultiplier! *
        (SizeConfig.isHeightVeryShort
            ? 22
            : SizeConfig.isHeightLarge
                ? 25
                : 20);
    return InkWell(
      onTap: onTap,
      child: Container(
          margin: const EdgeInsets.all(10),
          decoration: BoxDecoration(
            color: Colors.white,
            borderRadius: const BorderRadius.all(Radius.circular(10)),
            border: Border.all(color: HexColor('#707070'), width: 0.1),
          ),
          height: cardHeight,
          child: Padding(
            padding: const EdgeInsets.all(12.0),
            child: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  isSvg
                      ? SvgPicture.asset(assetPath, width: SizeConfig.widthMultiplier! * (14), height: cardHeight * 0.20)
                      : Image.asset(
                          assetPath,
                          width: SizeConfig.widthMultiplier! * (12),
                          height: cardHeight * 0.35,
                          // height: ,
                        ),
                  SizedBox(
                    height: height,
                  ),
                  Text(
                    label,
                    style: TextStyle(
                      fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * (SizeConfig.isHeightVeryShort ? 3 : 3.7),
                      color: MyColors.darkTextColor,
                      fontWeight: FontWeight.w600,
                      letterSpacing: -0.48,
                    ),
                  )
                ],
              ),
            ),
          )),
    );
  }
}
