import 'dart:ui';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';

import '../../constant/colors.dart';
import '../../constant/style.dart';

class DialogConfig {
  static const Duration animationDuration = Duration(milliseconds: 200);
  static const double blurStrength = 8.0;
  static const double cornerRadius = 14.0;
  static final BoxDecoration decoration = BoxDecoration(
    borderRadius: BorderRadius.circular(cornerRadius),
    boxShadow: [
      BoxShadow(
        color: Colors.black.withAlpha(38), // 0.15 opacity
        blurRadius: 16,
        offset: const Offset(0, 8),
      ),
    ],
  );
}

class MyDialog extends GetxController {
  void getDialog(String title, String? midTitle, VoidCallback onPressed) {
    HapticFeedback.mediumImpact();

    Get.dialog(
      TweenAnimationBuilder<double>(
        duration: DialogConfig.animationDuration,
        tween: Tween(begin: 0.0, end: 1.0),
        builder: (context, value, child) {
          return Transform.scale(
            scale: 0.95 + (0.05 * value),
            child: Opacity(opacity: value, child: child),
          );
        },
        child: BackdropFilter(
          filter: ImageFilter.blur(
            sigmaX: DialogConfig.blurStrength,
            sigmaY: DialogConfig.blurStrength,
          ),
          child: AlertDialog(
            backgroundColor: AppColor.surfaceElevated,
            shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)),
            title: Text(
              title,
              textAlign: TextAlign.center,
              style: AppStyle.headTitle,
            ),
            content: midTitle != null 
              ? Text(
                  midTitle,
                  textAlign: TextAlign.center,
                  style: AppStyle.subtitle,
                )
              : null,
            actionsPadding: const EdgeInsets.fromLTRB(16, 0, 16, 16),
            actions: [
              Row(
                children: [
                  Expanded(
                    child: TextButton(
                      onPressed: () => Get.back(),
                      style: TextButton.styleFrom(
                        padding: const EdgeInsets.symmetric(vertical: 16),
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(12),
                          side: const BorderSide(color: AppColor.divider),
                        ),
                      ),
                      child: Text('Cancel'.tr, style: AppStyle.subtitle),
                    ),
                  ),
                  const SizedBox(width: 12),
                  Expanded(
                    child: ElevatedButton(
                      onPressed: () {
                        HapticFeedback.mediumImpact();
                        onPressed();
                      },
                      style: ElevatedButton.styleFrom(
                        backgroundColor: AppColor.accent,
                        foregroundColor: Colors.white,
                        padding: const EdgeInsets.symmetric(vertical: 16),
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(12),
                        ),
                        elevation: 0,
                      ),
                      child: Text('OK'.tr, style: AppStyle.title.copyWith(color: Colors.white)),
                    ),
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
      barrierColor: Colors.black54,
    );
  }
}

class MyDialogContent extends GetxController {
  void getDialog(String title, Widget? content, VoidCallback onPressed) {
    HapticFeedback.mediumImpact();

    Get.dialog(
      TweenAnimationBuilder<double>(
        duration: DialogConfig.animationDuration,
        tween: Tween(begin: 0.0, end: 1.0),
        builder: (context, value, child) {
          return Transform.scale(
            scale: 0.95 + (0.05 * value),
            child: Opacity(opacity: value, child: child),
          );
        },
        child: BackdropFilter(
          filter: ImageFilter.blur(
            sigmaX: DialogConfig.blurStrength,
            sigmaY: DialogConfig.blurStrength,
          ),
          child: AlertDialog(
            backgroundColor: AppColor.surfaceElevated,
            shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24)),
            title: Text(
              title,
              textAlign: TextAlign.center,
              style: AppStyle.headTitle,
            ),
            content: content != null 
              ? SingleChildScrollView(child: content)
              : null,
            actionsPadding: const EdgeInsets.fromLTRB(16, 0, 16, 16),
            actions: [
              Row(
                children: [
                  Expanded(
                    child: TextButton(
                      onPressed: () => Get.back(),
                      style: TextButton.styleFrom(
                        padding: const EdgeInsets.symmetric(vertical: 16),
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(12),
                          side: const BorderSide(color: AppColor.divider),
                        ),
                      ),
                      child: Text('Cancel'.tr, style: AppStyle.subtitle),
                    ),
                  ),
                  const SizedBox(width: 12),
                  Expanded(
                    child: ElevatedButton(
                      onPressed: () {
                        HapticFeedback.mediumImpact();
                        onPressed();
                      },
                      style: ElevatedButton.styleFrom(
                        backgroundColor: AppColor.accent,
                        foregroundColor: Colors.white,
                        padding: const EdgeInsets.symmetric(vertical: 16),
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(12),
                        ),
                        elevation: 0,
                      ),
                      child: Text('OK'.tr, style: AppStyle.title.copyWith(color: Colors.white)),
                    ),
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
      barrierColor: Colors.black54,
    );
  }
}

