import 'package:barcode_widget/barcode_widget.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bmflocation/flutter_bmflocation.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:huixiang/generated/l10n.dart';
import 'package:huixiang/retrofit/data/base_data.dart';
import 'package:huixiang/retrofit/data/product.dart';
import 'package:huixiang/retrofit/data/vip_card.dart';
import 'package:huixiang/retrofit/retrofit_api.dart';
import 'package:huixiang/store/scan.dart';
import 'package:huixiang/utils/font_weight.dart';
import 'package:huixiang/utils/location.dart';
import 'package:huixiang/utils/painter_bg.dart';
import 'package:huixiang/view_widget/custom_image.dart';
import 'package:huixiang/view_widget/my_appbar.dart';
import 'package:huixiang/view_widget/my_footer.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:shared_preferences/shared_preferences.dart';

class VipDetailPage extends StatefulWidget {
  final Map<String, dynamic> arguments;

  VipDetailPage({this.arguments});

  @override
  State<StatefulWidget> createState() {
    return _VipDetailPage();
  }
}

class _VipDetailPage extends State<VipDetailPage> {
  ApiService apiService;

  @override
  void dispose() {
    super.dispose();
    refreshController.dispose();
    Location.getInstance().stopLocation();
  }

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

    vipDetail("", "");

    startLocation();
  }

  startLocation() async {
    // EasyLoading.show(status: S.current.zhengzaijiazai);
    Location.getInstance().startLocation(context, (BaiduLocation result) {
      if (result != null &&
          result.latitude != null &&
          result.longitude != null) {
        vipDetail(result.latitude, result.longitude);
      } else {
        EasyLoading.dismiss();
      }
    }).then((value) {
      if (!value) {
        EasyLoading.dismiss();
        refreshController.refreshFailed();
      }
    });
  }

  VipCard vipCard;
  final RefreshController refreshController = RefreshController();
  int current = 1;

  vipDetail(latitude, longitude) async {
    final SharedPreferences value = await SharedPreferences.getInstance();
    if(apiService == null)
      apiService = ApiService(Dio(), context: context, token: value.getString("token"));
    BaseData<VipCard> baseData = await apiService.vipDetail({
      "id": widget.arguments["id"],
      "latitude": "$latitude",
      "longitude": "$longitude",
    }).catchError((onError) {});
    if (baseData != null && baseData.isSuccess) {
      vipCard = baseData.data;
      refreshController.loadComplete();
    } else {
      refreshController.loadFailed();
    }
    print("object:object");
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: MyAppBar(
        title: S.of(context).huiyuankaxiangqing,
        titleColor: Colors.white,
        background: Color(0xFF3A405A),
        brightness: Brightness.dark,
        leadingColor: Colors.white,
      ),
      body: Column(
        children: [
          Stack(
            children: [
              CustomPaint(
                painter: BgPainter(
                  bgColor: Color(0xFF3A405A),
                  bezierHeight: 30.h,
                ),
                child: Container(
                  height: 220.h,
                ),
              ),
              buildVipCard(),
            ],
          ),
          Padding(
            padding: EdgeInsets.only(left: 16.w, top: 32.h, bottom: 8.h),
            child: Row(
              children: [
                Text(
                  S.of(context).shiyongmendian,
                  overflow: TextOverflow.ellipsis,
                  style: TextStyle(
                    fontSize: 16.sp,
                    fontWeight: MyFontWeight.semi_bold,
                    color: Colors.black,
                  ),
                ),
                SizedBox(
                  width: 8.w,
                ),
                Image.asset(
                  "assets/image/icon_shop.webp",
                ),
              ],
            ),
          ),
          Expanded(
            child: SmartRefresher(
              controller: refreshController,
              enablePullDown: false,
              enablePullUp: true,
              footer: CustomFooter(
                builder: (context, mode) {
                  return MyFooter(mode);
                },
              ),
              physics: BouncingScrollPhysics(),
              child: ListView.builder(
                itemBuilder: (context, position) {
                  return GestureDetector(
                    onTap: () {},
                    child: shopItem(vipCard.storeList[position]),
                  );
                },
                padding: EdgeInsets.symmetric(vertical: 1),
                itemCount: (vipCard != null && vipCard.storeList != null)
                    ? vipCard.storeList.length
                    : 0,
              ),
            ),
          ),
        ],
      ),
    );
  }

  Widget buildVipCard() {
    return Container(
      margin: EdgeInsets.fromLTRB(16.w, 8.h, 16.w, 8.h),
      height: 220.h,
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(8.w),
        color: Colors.white,
        boxShadow: [
          BoxShadow(
            color: Colors.black.withAlpha(12),
            offset: Offset(0, 3),
            blurRadius: 14,
            spreadRadius: 0,
          )
        ],
      ),
      child: Stack(
        // alignment: Alignment.center,
        children: [
          Image.asset(
            "assets/image/icon_vip_bj.webp",
            fit: BoxFit.fill, //填充剩余空间
            height: 220.h,
          ),
          Container(
            padding: EdgeInsets.all(16.w),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.start,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Row(
                  children: [
                    MImage(
                      (vipCard?.storeList?.length ?? 0) > 0
                          ? vipCard.storeList[0].logo
                          : "",
                      width: 40,
                      height: 40,
                      radius: BorderRadius.circular(4),
                      fit: BoxFit.cover,
                      errorSrc: "assets/image/default_1.webp",
                      fadeSrc: "assets/image/default_1.webp",
                    ),
                    SizedBox(
                      width: 8.w,
                    ),
                    Expanded(
                      child: Container(
                        height: 54.h,
                        child: Column(
                          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            Row(
                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                              crossAxisAlignment: CrossAxisAlignment.center,
                              children: [
                                Expanded(
                                  child: Text(
                                    vipCard != null ? vipCard.tenantName : "",
                                    overflow: TextOverflow.ellipsis,
                                    style: TextStyle(
                                      fontSize: 14.sp,
                                      fontWeight: MyFontWeight.semi_bold,
                                      color: Colors.black,
                                    ),
                                  ),
                                  flex: 1,
                                ),
                                Image.asset(
                                  "assets/image/icon_vip.webp",
                                ),
                              ],
                            ),
                            Text.rich(
                              TextSpan(
                                children: [
                                  TextSpan(
                                    text: S.of(context).huiyuanka,
                                    style: TextStyle(
                                      fontSize: 12.sp,
                                      fontWeight: MyFontWeight.regular,
                                      color: Colors.black,
                                    ),
                                  ),
                                ],
                              ),
                              textDirection: TextDirection.ltr,
                            ),
                          ],
                        ),
                      ),
                      flex: 1,
                    )
                  ],
                ),
                Expanded(
                  child: Container(),
                  flex: 1,
                ),
                Padding(
                  padding: EdgeInsets.only(left: 32.w, right: 32.w),
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Column(
                        children: [
                          Text.rich(
                            TextSpan(
                              children: [
                                TextSpan(
                                  text:
                                      "¥ ${vipCard != null ? vipCard.balance : ""}",
                                  style: TextStyle(
                                    fontSize: 24.sp,
                                    fontWeight: MyFontWeight.medium,
                                    color: Colors.black,
                                  ),
                                ),
                              ],
                            ),
                          ),
                          GestureDetector(
                            onTap: () {
                              Navigator.of(context).pushNamed(
                                  '/router/vip_balance',
                                  arguments: {"storeId": vipCard.id});
                            },
                            child: Row(
                              children: [
                                Text.rich(
                                  TextSpan(
                                    children: [
                                      TextSpan(
                                        text: S.of(context).yue,
                                        style: TextStyle(
                                          fontSize: 14.sp,
                                          fontWeight: MyFontWeight.semi_bold,
                                          color: Colors.black,
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                                Icon(
                                  Icons.keyboard_arrow_right,
                                  color: Colors.black,
                                  size: 22.5,
                                ),
                              ],
                            ),
                          ),
                        ],
                      ),
                      Column(
                        children: [
                          Text.rich(
                            TextSpan(
                              children: [
                                TextSpan(
                                  text: "0",
                                  style: TextStyle(
                                    fontSize: 24.sp,
                                    fontWeight: MyFontWeight.medium,
                                    color: Colors.black,
                                  ),
                                ),
                              ],
                            ),
                          ),
                          SizedBox(
                            height: 5.h,
                          ),
                          Text.rich(
                            TextSpan(
                              children: [
                                TextSpan(
                                  text: S.of(context).jifen,
                                  style: TextStyle(
                                    fontSize: 14.sp,
                                    fontWeight: MyFontWeight.semi_bold,
                                    color: Colors.black,
                                  ),
                                ),
                              ],
                            ),
                          ),
                        ],
                      ),
                    ],
                  ),
                ),
                Column(
                  children: [
                    Padding(
                      padding: EdgeInsets.only(top: 5.h, bottom: 5.h),
                      child: Text(
                        vipCard != null
                            ? "${vipCard.id.substring(0, 4)} "
                                "${vipCard.id.substring(4, 8)} "
                                "${vipCard.id.substring(8, 12)} "
                                "${vipCard.id.substring(12, 16)} "
                                "${vipCard.id.substring(16, vipCard.id.length)}"
                            : "",
                        maxLines: 1,
                        textAlign: TextAlign.center,
                        style: TextStyle(
                          color: Colors.black,
                          fontSize: 14.sp,
                          wordSpacing: vipCard == null
                              ? 10
                              : (MediaQuery.of(context).size.width - 64.w) /
                                  (((vipCard.id.length) * 4)),
                          letterSpacing: vipCard == null
                              ? 8
                              : (MediaQuery.of(context).size.width - 64.w) /
                                  (((vipCard.id.length) * 4)),
                        ),
                      ),
                    ),
                    BarcodeWidget(
                      barcode: Barcode.code128(),
                      data: vipCard == null ? "" : vipCard.id,
                      height: 30.h,
                      color: Colors.black,
                      drawText: false,
                    ),
                  ],
                )
              ],
            ),
          ),
        ],
      ),
    );
  }

  Widget shopItem(StoreListBean store) {
    return Container(
      margin: EdgeInsets.symmetric(horizontal: 16.w, vertical: 8.h),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.spaceAround,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Row(
            mainAxisAlignment: MainAxisAlignment.start,
            children: [
              Expanded(
                flex: 1,
                child: Text(
                  (store != null) ? store.storeName : "",
                  style: TextStyle(
                    fontSize: 14.sp,
                    fontWeight: MyFontWeight.semi_bold,
                    color: Colors.black,
                  ),
                ),
              ),
              GestureDetector(
                onTap: () {
                  // Navigator.of(context).pushNamed('/router/union_detail_page',
                  //     arguments: {"id": store.id});
                  if(store.posType.code == "NORMALSTORE") {
                    Scan.toScan(
                      context,
                      store.id,
                      store.tenantCode,
                      store.storeName,
                    );
                  } else {
                    Navigator.of(context).pushNamed(
                      '/router/store_order',
                      arguments: {
                        "id": store.id,
                        "tenant": store.tenantCode,
                        "storeName": store.storeName
                      },
                    );
                  }
                },
                child: Text(
                  S.of(context).chakan,
                  style: TextStyle(
                    fontSize: 12.sp,
                    fontWeight: MyFontWeight.medium,
                    color: Color(0xff32A060),
                  ),
                ),
              ),
              Icon(
                Icons.chevron_right,
                color: Color(0xff32A060),
                size: 16,
              ),
            ],
          ),
          SizedBox(
            height: 8.h,
          ),
          Row(
            children: [
              Text(
                "${S.of(context).dizhi}: ",
                style: TextStyle(
                  fontSize: 12.sp,
                  fontWeight: MyFontWeight.regular,
                  color: Color(0xff353535),
                ),
              ),
              Expanded(
                child: Text(
                  store.address,
                  overflow: TextOverflow.ellipsis,
                  style: TextStyle(
                    fontSize: 12.sp,
                    fontWeight: MyFontWeight.regular,
                    color: Color(0xff353535),
                  ),
                ),
                flex: 1,
              )
            ],
          ),
          SizedBox(
            height: 4.h,
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.start,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              Expanded(
                flex: 1,
                child: Text(
                  S.of(context).yingyeshijian((store.openStartTime == null &&
                          store.openEndTime == null)
                      ? S.of(context).quantian
                      : "${store.openStartTime.substring(0, store.openStartTime.lastIndexOf(":"))} - ${store.openEndTime.substring(0, store.openEndTime.lastIndexOf(":"))}"),
                  style: TextStyle(
                    fontSize: 12.sp,
                    fontWeight: MyFontWeight.regular,
                    color: Color(0xff353535),
                  ),
                ),
              ),
              Text(
                (store.distance ?? 0) > 1000
                    ? S.of(context).gongli(
                        ((store.distance ?? 0) / 1000 * 100).toInt() / 100.0)
                    : S
                        .of(context)
                        .mi(((store.distance ?? 0) * 100).toInt() / 100.0),
                style: TextStyle(
                  fontSize: 12.sp,
                  fontWeight: MyFontWeight.regular,
                  color: Color(0xff868686),
                ),
              ),
            ],
          ),
        ],
      ),
    );
  }

  bool isRemake = true;

  String totalPrice(orderInfo) {
    if (orderInfo == null) return "";
    double totalPrice = (double.tryParse(orderInfo.orderSum) +
        double.tryParse(orderInfo.postFee));
    if (orderInfo.orderDetail != null &&
        orderInfo.orderDetail.couponDTO != null) {
      totalPrice -= double.tryParse(orderInfo.orderDetail.couponDTO.money);
    }
    return "$totalPrice";
  }

  List<Widget> goodsItem(List<ProductsList> products) {
    if (products == null) return [];
    if (products.length > 3) {
      products = products.sublist(0, 3);
    }
    return products
        .map(
          (e) => Container(
            margin: EdgeInsets.symmetric(horizontal: 2.w),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                MImage(
                  e.skuImg,
                  width: 75.w,
                  height: 75.h,
                  fit: BoxFit.contain,
                  errorSrc: "assets/image/default_1.webp",
                  fadeSrc: "assets/image/default_1.webp",
                ),
                SizedBox(
                  height: 4.h,
                ),
                if (isRemake)
                  Container(
                    width: 75.w,
                    child: Text(
                      e.productName,
                      maxLines: 1,
                      textAlign: TextAlign.center,
                      overflow: TextOverflow.ellipsis,
                      style: TextStyle(
                        fontSize: 10.sp,
                        fontWeight: MyFontWeight.regular,
                        color: Color(0xFF353535),
                      ),
                    ),
                  ),
              ],
            ),
          ),
        )
        .toList();
  }
}