import 'dart:io';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:zhiying_base_widget/dialog/global_dialog/policy_dialog/policy_dialog.dart';
import 'package:zhiying_base_widget/models/app_config_model.dart';
import 'package:flutter_swiper/flutter_swiper.dart';
import 'package:zhiying_base_widget/utils/contants.dart';
import 'package:zhiying_base_widget/widgets/home/home_quick_entry/cached_network_image_util.dart';
import 'package:zhiying_comm/util/shared_prefe_util.dart';
import 'package:zhiying_comm/zhiying_comm.dart';
import 'package:zhiying_base_widget/utils/over_scroll_behavior.dart' as Scroll;

class GuidePage extends StatefulWidget {
  final GuideData model;
  final List<Uint8List> imageDatas;
  final List<Uint8List> bgImageDatas;

  const GuidePage(this.model, this.imageDatas, this.bgImageDatas, {Key key}) : super(key: key);

  @override
  State<StatefulWidget> createState() => _GuidePageState();
}

class _GuidePageState extends State<GuidePage> {
  @override
  void initState() {
    Future.delayed(Duration(milliseconds: 100), () {
      showPlolicy();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    List<int> list = List.generate(widget.imageDatas?.length, (index) => index);
    return WillPopScope(
      onWillPop: () async => false, // 拦截Android返回键
      child: Material(
        color: Colors.white,
        child: Theme(
          data: ThemeData(splashFactory: NoSplashFactory()),
          child: ScrollConfiguration(
            behavior: Scroll.OverScrollBehavior(),
            child: Swiper(
              physics: ClampingScrollPhysics(),
              itemBuilder: (BuildContext context, int index) {
                // return CachedNetworkImage(imageUrl: widget.model.images[index],fit: BoxFit.cover,);
                Uint8List bgImage;
                if (widget.bgImageDatas.length > index) {
                  bgImage = widget?.bgImageDatas[index];
                }

                return Stack(
                  alignment: Alignment.center,
                  children: <Widget>[
                    Container(
                        width: double.infinity,
                        height: double.infinity,
                        decoration: BoxDecoration(
                            image: DecorationImage(
                                image: bgImage != null
                                    ? Image.memory(
                                        bgImage,
                                      ).image
                                    : CachedNetworkImageProvider(""),
                                fit: BoxFit.fill)),
                        child: Center(
                            child: widget.imageDatas[index] != null
                                ? Image.memory(
                                    widget.imageDatas[index],
                                    fit: BoxFit.fitWidth,
                                  )
                                : Container(
                                    color: Colors.white,
                                  ))),
                    index == widget?.bgImageDatas?.length - 1
                        ? Positioned(
                            left: 0,
                            right: 0,
                            bottom: 110,
                            child: Center(
                              child: Row(
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: <Widget>[
                                  Container(
                                    alignment: Alignment.center,
                                    height: 46,
                                    width: 180,
                                    decoration: BoxDecoration(
                                        color: HexColor.fromHex(widget?.model?.btnBgColor ?? ""),
                                        borderRadius: BorderRadius.circular(45),
                                        boxShadow: [BoxShadow(color: HexColor.fromHex(widget?.model?.btnBgColor), offset: Offset(1, 2), blurRadius: 6)]),
                                    child: Text(
                                      widget?.model?.btnText ?? "",
                                      style: TextStyle(color: HexColor.fromHex(widget?.model?.btnTextColor ?? ""), fontSize: 16, height: 1.1),
                                    ),
                                  ),
                                ],
                              ),
                            ),
                          )
                        : Container()
                  ],
                );
              },
              loop: false,
              itemCount: widget.imageDatas?.length ?? 0,
              pagination: widget?.model?.indicatorType != "1"
                  ? null
                  : widget?.model?.indicatorCssType == "2"
                      ? SwiperCustomPagination(builder: (BuildContext context, SwiperPluginConfig config) {
                          return Align(
                            alignment: Alignment(0.0, 1),
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              crossAxisAlignment: CrossAxisAlignment.center,
                              children: list.map((index) {
                                return SafeArea(
                                  child: Container(
                                    margin: EdgeInsets.only(bottom: 40, left: 5, right: 5),
                                    height: 4,
                                    width: 20,
                                    decoration: BoxDecoration(
                                        borderRadius: BorderRadius.circular(10),
                                        color: index == config.activeIndex
                                            ? HexColor.fromHex(widget?.model?.indicatorChooseColor)
                                            : HexColor.fromHex(widget?.model?.indicatorUnchooseColor)),
                                  ),
                                );
                              }).toList(),
                            ),
                          );
                        })
                      : SwiperCustomPagination(builder: (BuildContext context, SwiperPluginConfig config) {
                          return Align(
                            alignment: Alignment(0.0, 1),
                            child: Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              crossAxisAlignment: CrossAxisAlignment.center,
                              children: list.map((index) {
                                return SafeArea(
                                  child: Container(
                                    margin: EdgeInsets.only(bottom: 40, left: 5, right: 5),
                                    height: 10,
                                    width: 10,
                                    decoration: BoxDecoration(
                                        borderRadius: BorderRadius.circular(10),
                                        color: index == config.activeIndex
                                            ? HexColor.fromHex(widget?.model?.indicatorChooseColor)
                                            : HexColor.fromHex(widget?.model?.indicatorUnchooseColor)),
                                  ),
                                );
                              }).toList(),
                            ),
                          );
                        }),
              onIndexChanged: (index) {},
              onTap: (index) {
                if (index == widget.model.guideCss.length - 1) {
                  Navigator.pop(context, true);
                }
              },
            ),
          ),
        ),
      ),
    );
  }

  void showPlolicy() async {
    ///协议弹窗
    String isShowPolicy = await SharedPreferencesUtil.getStringValue(Constants.isShowPolicy);
    if (isShowPolicy == null || isShowPolicy != '1') {
      NativeUtil.notifyInitSuccess();
      bool isAccept = await PolicyDialog.show(context);
      if (!isAccept) {
        exit(0);
      } else {
        await SharedPreferencesUtil.setStringValue(Constants.isShowPolicy, "1");
      }
    }
  }
}

class NoSplashFactory extends InteractiveInkFeatureFactory {
  InteractiveInkFeature create(
      {MaterialInkController controller,
      RenderBox referenceBox,
      Offset position,
      Color color,
      TextDirection textDirection,
      bool containedInkWell = false,
      rectCallback,
      BorderRadius borderRadius,
      ShapeBorder customBorder,
      double radius,
      onRemoved}) {
    return _NoInteractiveInkFeature(controller: controller, referenceBox: referenceBox);
  }
}

class _NoInteractiveInkFeature extends InteractiveInkFeature {
  _NoInteractiveInkFeature({
    MaterialInkController controller,
    RenderBox referenceBox,
  }) : super(controller: controller, referenceBox: referenceBox);

  void paintFeature(Canvas canvas, Matrix4 transform) {}
}