import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:kaer_with_panels/app/common/app_config.dart';
import 'package:kaer_with_panels/app/localization/app_translations.dart';
import 'package:kaer_with_panels/app/widgets/kr_local_image.dart';
import '../controllers/kr_invite_controller.dart';
import 'package:flutter/services.dart';
import 'package:share_plus/share_plus.dart';
import 'package:kaer_with_panels/app/utils/kr_common_util.dart';
import 'package:kaer_with_panels/app/widgets/hi_base_scaffold.dart';
import 'package:kaer_with_panels/app/widgets/hi_help_entrance.dart';
import 'package:kaer_with_panels/app/common/app_run_data.dart';

class KRInviteView extends GetView<KRInviteController> {
  const KRInviteView({super.key});

  @override
  Widget build(BuildContext context) {
    // 监听键盘高度，仅用于控制悬浮按钮的可见性
    final bool isKeyboardVisible = MediaQuery.of(context).viewInsets.bottom > 0;

    return HIBaseScaffold(
      resizeToAvoidBottomInset: true,
      child: GestureDetector(
        // 允许点击空白处收起键盘
        onTap: () => FocusScope.of(context).unfocus(),
        behavior: HitTestBehavior.translucent,
        child: Stack(
          children: [
            // 1. 背景层/滚动层
            Positioned.fill(
              child: LayoutBuilder(
                builder: (context, constraints) {
                  return SingleChildScrollView(
                    physics: isKeyboardVisible
                        ? const ClampingScrollPhysics()
                        : const NeverScrollableScrollPhysics(),
                    child: ConstrainedBox(
                      constraints: BoxConstraints(minHeight: constraints.maxHeight),
                      child: IntrinsicHeight(
                        child: Padding(
                          padding: EdgeInsets.symmetric(horizontal: 40.w),
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              // SizedBox(height: 20.w),
                              // 🟢 第一行：奖励说明
                              Container(
                                width: double.infinity,
                                padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.w),
                                decoration: BoxDecoration(
                                  color: Theme.of(context).primaryColor,
                                  borderRadius: BorderRadius.circular(25.r),
                                ),
                                child: Row(
                                  crossAxisAlignment: CrossAxisAlignment.center,
                                  children: [
                                    KrLocalImage(
                                      imageName: 'hi-home-logo',
                                      imageType: ImageType.svg,
                                      width: 54.w,
                                      color: Colors.black,
                                    ),
                                    SizedBox(width: 16.w),
                                    Flexible(
                                      child: Text(
                                        '受邀用户首次付款时，他将与您分别获得3天免费使用时长',
                                        style: TextStyle(
                                          color: Colors.black,
                                          fontSize: 14.sp,
                                          fontWeight: FontWeight.w500,
                                        ),
                                      ),
                                    ),
                                  ],
                                ),
                              ),

                              SizedBox(height: 10.w),
                              // 🟢 第二行：我的邀请码
                              Container(
                                padding: EdgeInsets.symmetric(horizontal: 4.w, vertical: 2.w),
                                decoration: BoxDecoration(
                                  border: Border.all(color: Colors.white, width: 2.0),
                                  borderRadius: BorderRadius.circular(1000.r),
                                ),
                                child: Obx(
                                      () => Row(
                                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                                    children: [
                                      Container(
                                        width: 100.w,
                                        height: 40.w,
                                        alignment: Alignment.center,
                                        decoration: BoxDecoration(
                                          color: Theme.of(context).primaryColor,
                                          borderRadius: BorderRadius.circular(1000.r),
                                        ),
                                        child: Text(
                                          '邀请码',
                                          style: TextStyle(
                                            color: Colors.black,
                                            fontSize: 16.sp,
                                            fontWeight: FontWeight.w600,
                                          ),
                                        ),
                                      ),
                                      Expanded(
                                        child: Text(
                                          controller.kr_referCode.value,
                                          textAlign: TextAlign.center,
                                          style: TextStyle(
                                            color: Colors.white,
                                            fontSize: 20.sp,
                                            fontWeight: FontWeight.bold,
                                          ),
                                        ),
                                      ),
                                      IconButton(
                                        icon: const KrLocalImage(
                                          imageName: 'share-icon',
                                          imageType: ImageType.svg,
                                          color: Colors.white,
                                        ),
                                        onPressed: () {

                                          if (controller.kr_referCode.value.isNotEmpty) {
                                            final code = controller.kr_referCode.value;
                                            final text = '#您的好友邀请您使用Hi快网络加速器\n'
                                                '安装完毕后，在软件内<邀请好友>页面粘贴以下邀请码\n'
                                                '$code\n'
                                                '首次付款后您和您的好友将会分别获得3天免费时长\n'
                                                '请在浏览器输入${KRAppRunData.getInstance().shareUrl.value}下载#';
                                            if (GetPlatform.isIOS) {
                                              Share.share(text, subject: '直接分享Hi快VPN邀请链接');
                                            } else {
                                              Clipboard.setData(ClipboardData(text: text));
                                              KRCommonUtil.kr_showToast(AppTranslations.kr_invite.inviteCodeCopied);
                                            }
                                          }
                                        },
                                      ),
                                    ],
                                  ),
                                ),
                              ),

                              SizedBox(height: 40.w),
                              const Spacer(),

                              // 🟢 第三部分：接受他人邀请
                              Obx(() {
                                // 只有当没有被邀请时才显示
                                if (controller.kr_refererId.value != 0) {
                                  return const SizedBox.shrink();
                                }
                                return Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: [
                                    Text(
                                      '接受他人邀请',
                                      style: TextStyle(
                                        color: Colors.white,
                                        fontSize: 14.sp,
                                        fontWeight: FontWeight.bold,
                                      ),
                                    ),
                                    SizedBox(height: 10.w),
                                    RepaintBoundary(
                                      child: TextField(
                                        controller: controller.otherInviteCodeController,
                                        contextMenuBuilder: (context, editableTextState) => const SizedBox.shrink(),
                                        textInputAction: TextInputAction.done,
                                        onSubmitted: (_) => controller.kr_handleBindInviteCode(),
                                        textAlign: TextAlign.center,
                                        maxLength: 10,
                                        style: const TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
                                        decoration: InputDecoration(
                                          counterText: '',
                                          hintText: '填码领免费时长...',
                                          hintStyle: const TextStyle(color: Color(0xFFA6A6A6)),
                                          filled: true,
                                          fillColor: Colors.transparent,
                                          contentPadding: EdgeInsets.symmetric(horizontal: 22.w),
                                          border: OutlineInputBorder(
                                            borderRadius: BorderRadius.circular(1000.r),
                                            borderSide: const BorderSide(color: Colors.white, width: 2.0),
                                          ),
                                          enabledBorder: OutlineInputBorder(
                                            borderRadius: BorderRadius.circular(1000.r),
                                            borderSide: const BorderSide(color: Colors.white, width: 2.0),
                                          ),
                                          focusedBorder: OutlineInputBorder(
                                            borderRadius: BorderRadius.circular(1000.r),
                                            borderSide: const BorderSide(color: Colors.white, width: 2.0),
                                          ),
                                          constraints: BoxConstraints(maxHeight: 50.h),
                                        ),
                                      ),
                                    ),
                                    if (!isKeyboardVisible) ...[
                                      SizedBox(height: 10.w),
                                      SizedBox(
                                        width: double.infinity,
                                        height: 50.w,
                                        child: ElevatedButton(
                                          style: ElevatedButton.styleFrom(
                                            backgroundColor: Theme.of(context).primaryColor,
                                            shape: RoundedRectangleBorder(
                                              borderRadius: BorderRadius.circular(1000.r),
                                            ),
                                          ),
                                          onPressed: () =>
                                              controller.kr_handleBindInviteCode(),
                                          child: Text(
                                            '保存',
                                            style: TextStyle(
                                              color: Colors.black,
                                              fontSize: 16.sp,
                                              fontWeight: FontWeight.bold,
                                            ),
                                          ),
                                        ),
                                      ),
                                    ],
                                  ],
                                );
                              }),
                              // 底部留白，确保键盘弹出后能滚过遮挡区域
                              SizedBox(height: isKeyboardVisible ? 20.w : 90.w),
                            ],
                          ),
                        ),
                      ),
                    ),
                  );
                },
              ),
            ),

            // 2. 🟢 修正：为了防止遮挡输入框，当键盘弹出时彻底隐藏该悬浮组件
            // 使用 Visibility 配合 maintainState，避免因组件销毁导致的定位状态丢失
            Visibility(
              visible: !isKeyboardVisible,
              child: const HIHelpEntrance(),
            ),
          ],
        ),
      ),
    );
  }
}