part of 'dialog.dart';

class CustomModalDialog extends StatelessWidget {
  final String title;
  final String? subtitle;
  final Widget child;
  final Widget? bottom;
  final VoidCallback? onClose;
  final double? minWidth;
  final double? maxWidth;
  final double? minHeight;
  final double? maxHeight;
  final EdgeInsets? contentPadding;

  const CustomModalDialog({
    super.key,
    required this.title,
    this.subtitle,
    required this.child,
    this.onClose,
    this.minWidth,
    this.maxWidth,
    this.minHeight,
    this.maxHeight,
    this.contentPadding,
    this.bottom,
  });

  @override
  Widget build(BuildContext context) {
    return Dialog(
      backgroundColor: AppColor.white,
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
      child: ConstrainedBox(
        constraints: BoxConstraints(
          minWidth: minWidth ?? context.deviceWidth * 0.3,
          maxWidth: maxWidth ?? context.deviceWidth * 0.8,
          minHeight: minHeight ?? context.deviceHeight * 0.3,
          maxHeight: maxHeight ?? context.deviceHeight * 0.8,
        ),
        child: IntrinsicWidth(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Container(
                padding: const EdgeInsets.all(16),
                width: double.infinity,
                decoration: const BoxDecoration(
                  color: AppColor.primary,
                  borderRadius: BorderRadius.vertical(top: Radius.circular(16)),
                ),
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Expanded(
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Text(
                            title,
                            style: AppStyle.xxl.copyWith(
                              color: AppColor.white,
                              fontWeight: FontWeight.bold,
                            ),
                          ),
                          if (subtitle != null)
                            Text(
                              subtitle ?? '',
                              style: AppStyle.lg.copyWith(
                                color: AppColor.textSecondary,
                                fontWeight: FontWeight.w500,
                              ),
                            ),
                        ],
                      ),
                    ),
                    const SpaceWidth(12),
                    IconButton(
                      icon: const Icon(Icons.close, color: AppColor.white),
                      onPressed: () {
                        if (onClose != null) {
                          onClose!();
                        } else {
                          context.maybePop();
                        }
                      },
                    ),
                  ],
                ),
              ),
              Flexible(
                child: SingleChildScrollView(
                  padding: contentPadding ?? EdgeInsets.zero,
                  child: child,
                ),
              ),
              if (bottom != null) bottom!,
            ],
          ),
        ),
      ),
    );
  }
}
