import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';

extension WithContainer on Widget {
  Widget get insideContainer => Container(
        color: AppColors.whiteColor,
        padding: const EdgeInsets.only(top: 16, bottom: 16, right: 21, left: 21),
        child: this,
      );
}

class DefaultButton extends StatelessWidget {
  final String text;
  final VoidCallback? onPress;
  final Color textColor;
  final Color? color;
  final Color? disabledColor;
  final IconData? iconData;
  final String? svgIcon;
  final double? fontSize;
  final bool isTextExpanded;
  final int count;
  final List<Color>? colors;
  final double height;
  final double borderRadius;

  const DefaultButton(
    this.text,
    this.onPress, {
    super.key,
    this.color,
    this.isTextExpanded = true,
    this.svgIcon,
    this.disabledColor,
    this.count = 0,
    this.textColor = Colors.white,
    this.iconData,
    this.fontSize,
    this.colors,
    this.height = 50,
    this.borderRadius = 100,
  });

  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: onPress,
      child: Container(
        height: height,
        decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(borderRadius),
            gradient: onPress == null
                ? LinearGradient(
                    colors: <Color>[
                      disabledColor ?? const Color(0xffEAEAEA),
                      disabledColor ?? const Color(0xffEAEAEA),
                    ],
                  )
                : null),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            if (iconData != null) Icon(iconData, color: textColor),
            if (svgIcon != null) Utils.buildSvgWithAssets(icon: svgIcon ?? "", applyThemeColor: false),
            if (!isTextExpanded)
              Padding(
                padding: EdgeInsets.only(
                  left: (iconData ?? svgIcon) != null ? 6 : 0,
                ),
                child: Text(
                  text,
                  textAlign: TextAlign.center,
                  style: TextStyle(
                    fontSize: fontSize ?? 18.f,
                    fontWeight: FontWeight.w600,
                    color: textColor,
                    letterSpacing: -0.48,
                  ),
                ),
              ),
            if (isTextExpanded)
              Expanded(
                child: Text(
                  text,
                  textAlign: TextAlign.center,
                  style: TextStyle(
                    fontSize: fontSize ?? 18.f,
                    fontWeight: FontWeight.w600,
                    color: textColor,
                    letterSpacing: -0.48,
                  ),
                ),
              ),
            if (count > 0)
              Align(
                alignment: Alignment.topCenter,
                child: Container(
                  margin: const EdgeInsets.only(top: 6, bottom: 6),
                  padding: const EdgeInsets.only(left: 5, right: 5),
                  alignment: Alignment.center,
                  height: 16,
                  decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(10.0),
                    color: Colors.white,
                  ),
                  child: Text(
                    "$count",
                    textAlign: TextAlign.center,
                    style: const TextStyle(
                      fontSize: 12,
                      fontWeight: FontWeight.w700,
                      color: Color(0xffD02127),
                      letterSpacing: -0.6,
                    ),
                  ),
                ),
              )
          ],
        ),
      ),
    );
  }
}
