// Author: fengshengxiong
// Date: 2024/5/11
// Description: 重命名弹框

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:tone_snap/components/base_easyloading.dart';
import 'package:tone_snap/components/divider_widget.dart';
import 'package:tone_snap/utils/obj_util.dart';

class RenameDialog extends StatefulWidget {
  const RenameDialog({
    super.key,
    required this.name,
    required this.confirmOnTap,
  });

  final String name;
  final Function(String value) confirmOnTap;

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

class RenameDialogState extends State<RenameDialog> {
  final _textEditingController = TextEditingController();
  int _cursorPosition = 0;

  @override
  void initState() {
    super.initState();
    _textEditingController.text = widget.name;
    _textEditingController.addListener(_saveCursorPosition);
  }

  @override
  void dispose() {
    _textEditingController.removeListener(_saveCursorPosition);
    _textEditingController.dispose();
    super.dispose();
  }

  void _saveCursorPosition() {
    _cursorPosition = _textEditingController.selection.base.offset;
  }

  @override
  Widget build(BuildContext context) {
    return PopScope(
      canPop: true,
      child: Center(
        child: SingleChildScrollView(
          padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
          child: Container(
            width: 0.8.sw,
            clipBehavior: Clip.antiAlias,
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.circular(8).r,
            ),
            child: IntrinsicHeight(
              child: Column(
                children: [
                  SizedBox(height: 10.h),
                  Text(
                    'Rename',
                    textAlign: TextAlign.center,
                    style: TextStyle(
                      color: Colors.black,
                      fontSize: 18.sp,
                      fontWeight: FontWeight.w500,
                    ),
                  ),
                  Container(
                    height: 40.h,
                    alignment: Alignment.center,
                    margin: EdgeInsets.symmetric(horizontal: 10.w, vertical: 12.h),
                    decoration: BoxDecoration(
                      color: const Color(0xFFf9f9fc),
                      borderRadius: BorderRadius.circular(8).r,
                    ),
                    child: TextField(
                      maxLines: 1,
                      controller: _textEditingController,
                      textInputAction: TextInputAction.done,
                      textAlign: TextAlign.start,
                      keyboardType: TextInputType.text,
                      style: TextStyle(color: Colors.black, fontSize: 16.sp),
                      textAlignVertical: TextAlignVertical.center,
                      decoration: InputDecoration(
                        counterText: '',
                        hintText: 'please enter',
                        hintStyle: TextStyle(color: const Color(0xFF999999), fontSize: 16.sp,),
                        contentPadding: const EdgeInsets.symmetric(horizontal: 10).w,
                        isCollapsed: true,
                        border: InputBorder.none,
                      ),
                      onChanged: (text) {
                        _textEditingController.selection = TextSelection.fromPosition(
                          TextPosition(offset: _cursorPosition),
                        );
                      },
                    ),
                  ),
                  const DividerWidget(),
                  SizedBox(
                    height: 52.h,
                    child: Row(
                      children: [
                        _optionButton('Cancel', false),
                        Container(
                          width: 1.w,
                          height: double.infinity,
                          color: const Color(0xFFE5E5E5),
                        ),
                        _optionButton('Confirm', true),
                      ],
                    ),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }

  Widget _optionButton(String label, bool isConfirm) {
    return Expanded(
      child: Material(
        color: Colors.transparent,
        child: InkWell(
          onTap: () {
            if (isConfirm) {
              if (!ObjUtil.isNotEmpty(_textEditingController.text)) {
                BaseEasyLoading.toast('name cannot be empty');
                return;
              }
              Get.back();
              widget.confirmOnTap(_textEditingController.text);
            } else {
              Get.back();
            }
          },
          child: SizedBox(
            height: double.infinity,
            child: Center(
              child: Text(
                label,
                textAlign: TextAlign.center,
                style: TextStyle(
                  color: isConfirm ? Colors.black : const Color(0xFF666666),
                  fontSize: 16.sp,
                  fontWeight: FontWeight.w500,
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}
