import 'package:cpt_rewards/modules/rewards_confirm/rewards_confirm_page.dart';
import 'package:cs_resources/generated/l10n.dart';
import 'package:cs_resources/theme/app_colors_theme.dart';
import 'package:domain/entity/rewards_detail_entity.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:auto_route/auto_route.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:router/ext/auto_router_extensions.dart';
import 'package:shared/utils/date_time_utils.dart';
import 'package:shared/utils/log_utils.dart';
import 'package:shared/utils/color_utils.dart';
import 'package:widgets/ext/ex_widget.dart';
import 'package:widgets/load_state_layout.dart';
import 'package:widgets/my_appbar.dart';
import 'package:widgets/my_load_image.dart';
import 'package:widgets/my_text_view.dart';
import 'package:widgets/shatter/picker_container.dart';
import 'package:widgets/utils/dark_theme_util.dart';
import 'package:widgets/widget_export.dart';
import 'package:cs_resources/generated/assets.dart';

import '../../../router/page/rewards_page_router.dart';
import './rewards_detail_vm.dart';

@RoutePage()
class RewardsDetailPage extends HookConsumerWidget {
  final int? id;

  const RewardsDetailPage({Key? key, @PathParam('id') required this.id})
      : super(key: key);

  //启动当前页面
  static void startInstance({
    BuildContext? context,
    int? id,
  }) {
    if (context != null) {
      context.router.push(RewardsDetailPageRoute(id: id));
    } else {
      appRouter.push(RewardsDetailPageRoute(id: id));
    }
  }

  // listitem
  Widget _buildSaleItem(BuildContext context, WidgetRef ref, _vm, detailInfo) {
    String title = detailInfo!.title ?? "";
    String createdAt = detailInfo.createdAt ?? "";
    List? resources = detailInfo!.resources ?? [];
    int point = detailInfo.point ?? 0;
    int originalPoint = detailInfo.originalPoint ?? 0;
    String description = detailInfo.description ?? "";
    bool reservation = detailInfo!.reservation;
    String redeemedStart = detailInfo.redeemedStart ?? "";
    String redeemedEnd = detailInfo.redeemedEnd ?? "";
    String redeemedDate = '$redeemedStart-$redeemedEnd';
    String? createAt = '${redeemedStart.split(" at ")[0]} ${redeemedStart.split(" at ")[1]}';
    String? createEnd =
        '${redeemedEnd.split(" at ")[0]} ${redeemedEnd.split(" at ")[1]}';
        String cretaeDate = '$createAt-$createEnd';
    return Column(
      children: [
        Container(
            decoration: BoxDecoration(
              color: context.appColors.whiteBG,
              borderRadius: BorderRadius.all(Radius.circular(6.0)),
              boxShadow: [BoxShadow(color: context.appColors.itemBGShadow)],
            ),
            width: MediaQuery.of(context).size.width - 30,
            // height: 420,
            // margin: const EdgeInsets.only(left: 15, right: 15, top: 12.5),
            child: Column(
              children: [
                resources!.length > 0
                    ? MyLoadImage(
                        resources[0] ?? '',
                        width: MediaQuery.of(context).size.width,
                        height: 150,
                      )
                    : Container(),
                Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  mainAxisAlignment: MainAxisAlignment.start,
                  children: [
                    Text(
                      maxLines: 1, // 设置最大行数为2
                      overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
                      title,
                      style: TextStyle(
                          fontSize: 16.0,
                          color: context.appColors.textBlack,
                          fontWeight: FontWeight.w500),
                    ),
                    Text(
                      maxLines: 1, // 设置最大行数为2
                      overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
                      '${S.current.published_date}: $createdAt',
                      style: TextStyle(
                          fontSize: 13.0,
                          color: DarkThemeUtil.multiColors(
                              context, ColorUtils.string2Color('#808DAF'),
                              darkColor: Colors.white),
                          fontWeight: FontWeight.w400),
                    ).marginOnly(bottom: 5),
                    Row(
                      children: [
                        Text(
                          '$point',
                          style: TextStyle(
                              fontSize: 19.0,
                              color: context.appColors.textBlack,
                              fontWeight: FontWeight.w500),
                        ),
                        Text(
                          '$originalPoint',
                          style: TextStyle(
                              decoration: TextDecoration.lineThrough,
                              decorationColor: DarkThemeUtil.multiColors(
                                  context, ColorUtils.string2Color('#808DAF'),
                                  darkColor: Colors.white),
                              decorationStyle: TextDecorationStyle.solid,
                              fontSize: 12.0,
                              color: ColorUtils.string2Color('#808DAF'),
                              fontWeight: FontWeight.w400),
                        ).marginOnly(left: 5, right: 5),
                        Text(
                          S.current.points,
                          style: TextStyle(
                              fontSize: 13.0,
                              color: context.appColors.textBlack,
                              fontWeight: FontWeight.w400),
                        ),
                      ],
                    ),
                    Text(
                      description,
                      style: TextStyle(
                          fontSize: 13.0,
                          color: DarkThemeUtil.multiColors(
                              context, ColorUtils.string2Color('#808DAF'),
                              darkColor: Colors.white),
                          fontWeight: FontWeight.w400),
                    ).marginOnly(bottom: 10, top: 10),
                    Container(
                        height: 28,
                        decoration: BoxDecoration(
                          color: ColorUtils.string2Color('#F2F3F6'),
                          borderRadius:
                              const BorderRadius.all(Radius.circular(6.0)),
                        ),
                        child: Column(
                          children: [
                            Row(
                              mainAxisSize: MainAxisSize.min,
                              mainAxisAlignment: MainAxisAlignment.start,
                              crossAxisAlignment: CrossAxisAlignment.center,
                              children: [
                                MyAssetImage(
                                  Assets.rewardsRewardsDetailDay,
                                  width: 25,
                                  height: 25,
                                  color: DarkThemeUtil.multiColors(
                                      context, AppColorsTheme.colorPrimary,
                                      darkColor: Colors.white),
                                ),
                                Text(
                                  maxLines: 1, // 设置最大行数为2
                                  overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
                                  '$cretaeDate',
                                  style: TextStyle(
                                      fontSize: 14.0,
                                      color: ColorUtils.string2Color('#808DAF'),
                                      fontWeight: FontWeight.w400),
                                )
                              ],
                            ).paddingOnly(left: 7, right: 12),
                            // Text(
                            //   maxLines: 1, // 设置最大行数为2
                            //   overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
                            //   '|',
                            //   style: TextStyle(
                            //       fontSize: 14.0,
                            //       color: ColorUtils.string2Color('#808DAF'),
                            //       fontWeight: FontWeight.w400),
                            // ),
                            // Text(
                            //   maxLines: 1, // 设置最大行数为2
                            //   overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
                            //   '$redeemedEnd',
                            //   style: TextStyle(
                            //       fontSize: 14.0,
                            //       color: ColorUtils.string2Color('#808DAF'),
                            //       fontWeight: FontWeight.w400),
                            // ).marginOnly(left: 30)
                          ],
                        )),
                    Container(
                            height: 28,
                            decoration: BoxDecoration(
                              color: ColorUtils.string2Color('#F2F3F6'),
                              borderRadius:
                                  const BorderRadius.all(Radius.circular(6.0)),
                            ),
                            child: Row(
                              mainAxisSize: MainAxisSize.min,
                              mainAxisAlignment: MainAxisAlignment.start,
                              crossAxisAlignment: CrossAxisAlignment.center,
                              children: [
                                MyAssetImage(
                                  Assets.rewardsRewardsDetailRequired,
                                  width: 25,
                                  height: 25,
                                  color: DarkThemeUtil.multiColors(
                                      context, AppColorsTheme.colorPrimary,
                                      darkColor: Colors.white),
                                ),
                                Text(
                                  maxLines: 1, // 设置最大行数为2
                                  overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
                                  reservation
                                      ? S.current.reservation_required
                                      : S.current.no_reservation_required,
                                  style: TextStyle(
                                      fontSize: 14.0,
                                      color: ColorUtils.string2Color('#808DAF'),
                                      fontWeight: FontWeight.w400),
                                )
                              ],
                            ).paddingOnly(left: 7, right: 12))
                        .marginOnly(top: 8, bottom: 25)
                  ],
                ).paddingOnly(left: 15, right: 15, top: 10),
              ],
            )),
      ],
    ).marginOnly(left: 15, bottom: 15, right: 15);
  }

  Widget _buildDeal(BuildContext context, WidgetRef ref, _vm) {
    return Column(
      children: [
        Container(
          decoration: const BoxDecoration(
            color: Colors.white,
            borderRadius: BorderRadius.all(Radius.circular(6.0)),
            boxShadow: [
              BoxShadow(
                  color: Color.fromRGBO(184, 191, 217, 0.3), blurRadius: 6)
            ],
          ),
          width: MediaQuery.of(context).size.width - 30,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Row(
                mainAxisSize: MainAxisSize.min,
                mainAxisAlignment: MainAxisAlignment.start,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  MyAssetImage(
                    Assets.rewardsRewardsDetailDeal,
                    width: 25,
                    height: 25,
                    color: DarkThemeUtil.multiColors(
                        context, AppColorsTheme.colorPrimary,
                        darkColor: Colors.white),
                  ).marginOnly(right: 10),
                  Text(
                    S.current.redeem_deal_at,
                    style: TextStyle(
                        fontSize: 15.0,
                        color: context.appColors.textBlack,
                        fontWeight: FontWeight.w500),
                  )
                ],
              ),
              Container(
                      height: 77,
                      decoration: BoxDecoration(
                        color: DarkThemeUtil.multiColors(
                            context, ColorUtils.string2Color('#F2F3F6'),
                            darkColor: Colors.white),
                        borderRadius:
                            const BorderRadius.all(Radius.circular(6.0)),
                      ),
                      child: Row(
                        mainAxisSize: MainAxisSize.max,
                        mainAxisAlignment: MainAxisAlignment.start,
                        crossAxisAlignment: CrossAxisAlignment.center,
                        children: [
                          MyAssetImage(
                            Assets.rewardsRewardsIndex1,
                            width: 60,
                            height: 60,
                            color: DarkThemeUtil.multiColors(
                                context, AppColorsTheme.colorPrimary,
                                darkColor: Colors.white),
                          ).marginOnly(right: 15),
                          Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Text(
                                maxLines: 1, // 设置最大行数为2
                                overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
                                'Delibowl Group',
                                style: TextStyle(
                                    fontSize: 15.0,
                                    color: DarkThemeUtil.multiColors(context,
                                        ColorUtils.string2Color('#54638C'),
                                        darkColor: Colors.white),
                                    fontWeight: FontWeight.w500),
                              ).marginOnly(bottom: 8),
                              Text(
                                maxLines: 1, // 设置最大行数为2
                                overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
                                '#01-136, SingPost Center, 408600',
                                style: TextStyle(
                                    fontSize: 14.0,
                                    color: DarkThemeUtil.multiColors(context,
                                        ColorUtils.string2Color('#54638C'),
                                        darkColor: Colors.white),
                                    fontWeight: FontWeight.w400),
                              )
                            ],
                          ).paddingOnly(
                            top: 5,
                          )
                        ],
                      ).paddingOnly(left: 12, right: 12, bottom: 9, top: 9))
                  .marginOnly(top: 12, bottom: 12),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  Text(
                    'Also redeemable in 1 more location',
                    style: TextStyle(
                        fontSize: 15.0,
                        color: DarkThemeUtil.multiColors(
                            context, ColorUtils.string2Color('#54638C'),
                            darkColor: Colors.white),
                        fontWeight: FontWeight.w400),
                  ),
                  MyAssetImage(
                    Assets.rewardsRewardsRight,
                    width: 12,
                    height: 16,
                    color: DarkThemeUtil.multiColors(
                        context, AppColorsTheme.colorPrimary,
                        darkColor: Colors.white),
                  ),
                ],
              ),
            ],
          ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
        ),
      ],
    ).marginOnly(left: 15, bottom: 15, right: 15);
  }

  Widget _buildPackage(BuildContext context, WidgetRef ref, _vm, detailInfo) {
    String package = detailInfo.package ?? "";
    return Column(
      children: [
        Container(
          decoration: BoxDecoration(
            color: context.appColors.whiteBG,
            borderRadius: const BorderRadius.all(Radius.circular(6.0)),
            boxShadow: [BoxShadow(color: context.appColors.itemBGShadow)],
          ),
          width: MediaQuery.of(context).size.width - 30,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Row(
                mainAxisSize: MainAxisSize.min,
                mainAxisAlignment: MainAxisAlignment.start,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  MyAssetImage(
                    Assets.rewardsRewardsDetailPackage,
                    width: 25,
                    height: 25,
                    color: DarkThemeUtil.multiColors(
                        context, AppColorsTheme.colorPrimary,
                        darkColor: Colors.white),
                  ).marginOnly(right: 10),
                  Text(
                    'What’s In The Package',
                    style: TextStyle(
                        fontSize: 15.0,
                        color: context.appColors.textBlack,
                        fontWeight: FontWeight.w500),
                  )
                ],
              ).marginOnly(bottom: 10),
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    package,
                    style: TextStyle(
                        fontSize: 15.0,
                        color: DarkThemeUtil.multiColors(
                            context, ColorUtils.string2Color('#54638C'),
                            darkColor: Colors.white),
                        fontWeight: FontWeight.w400),
                  ),
                ],
              ),
            ],
          ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
        ),
      ],
    ).marginOnly(left: 15, bottom: 15, right: 15);
  }

  Widget _buildNotice(BuildContext context, WidgetRef ref, _vm, detailInfo) {
    String notice = detailInfo.notice ?? "";
    return Column(
      children: [
        Container(
          decoration: BoxDecoration(
            color: context.appColors.whiteBG,
            borderRadius: const BorderRadius.all(Radius.circular(6.0)),
            boxShadow: [BoxShadow(color: context.appColors.itemBGShadow)],
          ),
          width: MediaQuery.of(context).size.width - 30,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Row(
                mainAxisSize: MainAxisSize.min,
                mainAxisAlignment: MainAxisAlignment.start,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  MyAssetImage(
                    Assets.rewardsRewardsDetailNotice,
                    width: 25,
                    height: 25,
                    color: DarkThemeUtil.multiColors(
                        context, AppColorsTheme.colorPrimary,
                        darkColor: Colors.white),
                  ).marginOnly(right: 10),
                  Text(
                    S.current.redemption_notice,
                    style: TextStyle(
                        fontSize: 15.0,
                        color: context.appColors.textBlack,
                        fontWeight: FontWeight.w500),
                  )
                ],
              ).marginOnly(bottom: 10),
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    notice,
                    style: TextStyle(
                        fontSize: 15.0,
                        color: DarkThemeUtil.multiColors(
                            context, ColorUtils.string2Color('#54638C'),
                            darkColor: Colors.white),
                        fontWeight: FontWeight.w400),
                  ),
                ],
              ),
            ],
          ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
        ),
      ],
    ).marginOnly(left: 15, bottom: 15, right: 15);
  }

  Widget _buildInstructions(BuildContext context, WidgetRef ref, _vm) {
    return Column(
      children: [
        Container(
          decoration: BoxDecoration(
            color: context.appColors.whiteBG,
            borderRadius: BorderRadius.all(Radius.circular(6.0)),
            boxShadow: [BoxShadow(color: context.appColors.itemBGShadow)],
          ),
          width: MediaQuery.of(context).size.width - 30,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Row(
                mainAxisSize: MainAxisSize.min,
                mainAxisAlignment: MainAxisAlignment.start,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  MyAssetImage(
                    Assets.rewardsRewardsDetailInstructions,
                    width: 25,
                    height: 25,
                    color: DarkThemeUtil.multiColors(
                        context, AppColorsTheme.colorPrimary,
                        darkColor: Colors.white),
                  ).marginOnly(right: 10),
                  Text(
                    S.current.redemption_instructions,
                    style: TextStyle(
                        fontSize: 15.0,
                        color: context.appColors.textBlack,
                        fontWeight: FontWeight.w500),
                  )
                ],
              ).marginOnly(bottom: 10),
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    S.current.redemption_reservation_txt,
                    style: TextStyle(
                        fontSize: 15.0,
                        color: DarkThemeUtil.multiColors(
                            context, ColorUtils.string2Color('#54638C'),
                            darkColor: Colors.white),
                        fontWeight: FontWeight.w400),
                  ),
                ],
              ),
            ],
          ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
        ),
      ],
    ).marginOnly(left: 15, bottom: 15, right: 15);
  }

  Widget _buildRedeemable(
      BuildContext context, WidgetRef ref, _vm, detailInfo) {
    List? redeemable = detailInfo!.redeemable ?? [];
    return Column(
      children: [
        Container(
          decoration: BoxDecoration(
            color: context.appColors.whiteBG,
            borderRadius: const BorderRadius.all(Radius.circular(6.0)),
            boxShadow: [BoxShadow(color: context.appColors.itemBGShadow)],
          ),
          width: MediaQuery.of(context).size.width - 30,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Row(
                mainAxisSize: MainAxisSize.min,
                mainAxisAlignment: MainAxisAlignment.start,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  MyAssetImage(
                    Assets.rewardsRewardsDetailNotice,
                    width: 25,
                    height: 25,
                    color: DarkThemeUtil.multiColors(
                        context, AppColorsTheme.colorPrimary,
                        darkColor: Colors.white),
                  ).marginOnly(right: 10),
                  Text(
                    S.current.redeemable_on,
                    style: TextStyle(
                        fontSize: 15.0,
                        color: context.appColors.textBlack,
                        fontWeight: FontWeight.w500),
                  )
                ],
              ).marginOnly(bottom: 10),
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: List.generate(
                  redeemable!.length,
                  (index) {
                    final item = redeemable[index];
                    return Text(
                      '${item.day}: ${item.time}',
                      style: TextStyle(
                          fontSize: 15.0,
                          color: DarkThemeUtil.multiColors(
                              context, ColorUtils.string2Color('#54638C'),
                              darkColor: Colors.white),
                          fontWeight: FontWeight.w400),
                    );
                  },
                ),
              ),
            ],
          ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
        ),
      ],
    ).marginOnly(left: 15, bottom: 15, right: 15);
  }

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final _vm = ref.read(rewardsDetailVmProvider.notifier);
    final state = ref.watch(rewardsDetailVmProvider);
    RewardsDetailEntity? detailInfo = state.detailInfo;
    useEffect(() {
      // 组件挂载时执行 - 执行接口请求
      Future.microtask(() => _vm.initPageData(id: id));
      return () {
        // 组件卸载时执行
        Log.d("property_news_page 组件卸载时执行");
      };
    }, []);
    return Scaffold(
      appBar: MyAppBar.appBar(
        context,
        S.current.detail,
        backgroundColor: context.appColors.whiteBG,
      ),
      body: LoadStateLayout(
          state: state.loadingState,
          errorMessage: state.errorMessage,
          errorRetry: () {
            _vm.retryRequest(id: id);
          },
          successWidget: Column(
            children: [
              Expanded(
                  child: SingleChildScrollView(
                      scrollDirection: Axis.vertical,
                      physics: const BouncingScrollPhysics(),
                      clipBehavior: Clip.none,
                      child: Column(
                        children: [
                          Container(
                              color: context.appColors.backgroundDark,
                              padding: const EdgeInsets.only(top: 15),
                              child: Column(
                                children: [
                                  _buildSaleItem(context, ref, _vm, detailInfo),
                                  // _buildDeal(context, ref, _vm),
                                  _buildPackage(context, ref, _vm, detailInfo),
                                  _buildNotice(context, ref, _vm, detailInfo),
                                  // _buildInstructions(context, ref, _vm),
                                  _buildRedeemable(
                                      context, ref, _vm, detailInfo),
                                ],
                              )),
                        ],
                      ))),
              Container(
                height: 50,
                color: context.appColors.btnBgDefault,
                child: Flex(
                  direction: Axis.horizontal,
                  children: [
                    Expanded(
                      flex: 1,
                      child: Container(
                        color: context.appColors.btnBgDefault,
                        height: 100,
                        child: Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: [
                            MyTextView(
                              S.current.redeem,
                              fontSize: 16,
                              textColor: Colors.white,
                              isFontMedium: true,
                            ),
                          ],
                        ),
                      ).onTap(() {
                        RewardsConfirmPage.startInstance(id: detailInfo?.id);
                      }),
                    ),
                  ],
                ),
              )
            ],
          )),
    );
  }
}
