import 'package:cs_resources/generated/l10n.dart';
import 'package:cs_resources/theme/app_colors_theme.dart';
import 'package:domain/entity/rewards_active_detail_entity.dart';
import 'package:domain/entity/rewards_my_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/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_redeem_vm.dart';

@RoutePage()
class RewardsRedeemPage extends HookConsumerWidget {
  final int? id;
  const RewardsRedeemPage({Key? key, @PathParam('id') required this.id})
      : super(key: key);

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

  // listitem
  Widget _buildSaleItem(BuildContext context, WidgetRef ref, _vm, detailInfo) {
    String title = detailInfo!.reward.title ?? "";
    List? resources = detailInfo!.reward.resources ?? [];
    int point = detailInfo!.reward.point ?? 0;
    int originalPoint = detailInfo!.reward.originalPoint ?? 0;
    return Column(
      children: [
        Container(
            decoration:  BoxDecoration(
              color: context.appColors.whiteBG,
              borderRadius: const BorderRadius.all(Radius.circular(6.0)),
              boxShadow: const [
                BoxShadow(
                    color: Color.fromRGBO(184, 191, 217, 0.3), blurRadius: 6)
              ],
            ),
            width: MediaQuery.of(context).size.width - 30,
            // height: 420,
            // margin: const EdgeInsets.only(left: 15, right: 15, top: 12.5),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              mainAxisAlignment: MainAxisAlignment.start,
              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: 17.0,
                          color: context.appColors.textBlack,
                          fontWeight: FontWeight.w500),
                    ).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: DarkThemeUtil.multiColors(context, ColorUtils.string2Color('#808DAF'),darkColor: Colors.white),
                              fontWeight: FontWeight.w400),
                        ).marginOnly(left: 5, right: 5),
                         Text(
                          S.current.points,
                          style:  TextStyle(
                              fontSize: 13.0,
                              color: context.appColors.textBlack   ,
                              fontWeight: FontWeight.w400),
                        ),
                      ],
                    ),
                  ],
                ).paddingOnly(left: 15, right: 15, top: 10, bottom: 20),
              ],
            )),
      ],
    ).marginOnly(left: 15, bottom: 15, right: 15);
  }

  Widget _buildPackage(BuildContext context, WidgetRef ref, _vm, detailInfo) {
    String createdAt = detailInfo.createdAt ?? "";
    return Column(
      children: [
        Container(
          decoration:  BoxDecoration(
            color: context.appColors.whiteBG   ,
            borderRadius: const BorderRadius.all(Radius.circular(6.0)),
            boxShadow: const [
              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.rewardsRewardsIconDatd,
                    width: 25,
                    height: 25,
                     color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
                  ).marginOnly(right: 10),
                  Text(
                    S.current.redeem_date,
                    style: TextStyle(
                        fontSize: 15.0,
                        color: context.appColors.textBlack   ,
                        fontWeight: FontWeight.w500),
                  )
                ],
              ).marginOnly(bottom: 10),
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    createdAt,
                    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 _buildFrom(BuildContext context, WidgetRef ref, _vm, detailInfo) {
    String redeemedStart = detailInfo!.reward.redeemedStart ?? "";
    String redeemedEnd = detailInfo.reward.redeemedEnd ?? "";
    String redeemedDate = '$redeemedStart until $redeemedEnd';
    return Column(
      children: [
        Container(
          decoration:  BoxDecoration(
            color: context.appColors.whiteBG ,
            borderRadius: const BorderRadius.all(Radius.circular(6.0)),
            boxShadow: const [
              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.rewardsRewardsIconDate,
                    width: 25,
                    height: 25,
                     color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
                  ).marginOnly(right: 10),
                  Text(
                    S.current.redeem_from,
                    style: TextStyle(
                        fontSize: 15.0,
                        color:context.appColors.textBlack ,
                        fontWeight: FontWeight.w500),
                  )
                ],
              ).marginOnly(bottom: 10),
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    redeemedDate,
                    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 _buildRedeemed(BuildContext context, WidgetRef ref, _vm) {
    return Column(
      children: [
        Container(
          decoration:  BoxDecoration(
            color:context.appColors.whiteBG  ,
            borderRadius: const BorderRadius.all(Radius.circular(6.0)),
            boxShadow: const [
              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.max,
                mainAxisAlignment: MainAxisAlignment.start,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                   MyAssetImage(
                    Assets.rewardsRewardsSuccess,
                    width: 17,
                    height: 17,
                     color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
                  ).marginOnly(right: 12),
                  Expanded(
                    child: Text(
                      S.current.have_redeemed_promotion,
                      style: TextStyle(
                          fontSize: 15.0,
                          color: context.appColors.textPrimary   ,
                          fontWeight: FontWeight.w500),
                    ),
                  )
                ],
              )
            ],
          ).paddingOnly(left: 15, right: 75, top: 22, bottom: 20),
        ),
      ],
    ).marginOnly(left: 15, bottom: 15, right: 15);
  }

  Widget _buildTop(BuildContext context, WidgetRef ref, _vm) {
    return Container(
        width: MediaQuery.of(context).size.width,
        color: context.appColors.whiteBG  ,
        padding: const EdgeInsets.only(top: 15, bottom: 30),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
             MyAssetImage(
              Assets.rewardsRewardsSuccess,
              width: 54,
              height: 54,
               color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
            ),
            Text(
              '${S.current.congratulations}!',
              style: TextStyle(
                  fontSize: 18.0,
                  color: context.appColors.textPrimary    ,
                  fontWeight: FontWeight.w500),
            ).marginOnly(top: 12, bottom: 15),
          ],
        ));
  }

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final _vm = ref.read(rewardsRedeemVmProvider.notifier);
    final state = ref.watch(rewardsRedeemVmProvider);
    RewardsMyDetailEntity? detailInfo = state.detail;
    useEffect(() {
      // 组件挂载时执行 - 执行接口请求
      Future.microtask(() => _vm.initPageData(id: id));
      return () {
        // 组件卸载时执行
        Log.d("property_news_page 组件卸载时执行");
      };
    }, []);
    return Scaffold(
      appBar: MyAppBar.appBar(
        context,
        S.current.payment_successful,
        backgroundColor: context.appColors.whiteBG,
      ),
      body: detailInfo?.createdAt != ''
          ? 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: [
                              _buildTop(context, ref, _vm),
                              Container(
                                  color: context.appColors.backgroundDark,
                                  padding: const EdgeInsets.only(top: 15),
                                  child: Column(
                                    children: [
                                      _buildPackage(
                                          context, ref, _vm, detailInfo),
                                      _buildRedeemed(context, ref, _vm),
                                      _buildSaleItem(
                                          context, ref, _vm, detailInfo),
                                      _buildFrom(context, ref, _vm, detailInfo),
                                    ],
                                  )),
                            ],
                          ))),
                ],
              ))
          : const SizedBox.shrink(),
    );
  }
}
