import 'package:flutter/material.dart';
import 'package:syncrow_app/utils/context_extension.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';

class DefaultButton extends StatelessWidget {
  const DefaultButton({
    super.key,
    this.enabled = true,
    this.onPressed,
    required this.child,
    this.isSecondary = false,
    this.isLoading = false,
    this.isDone = false,
    this.customTextStyle,
    this.customButtonStyle,
    this.backgroundColor,
    this.foregroundColor,
    this.borderRadius,
    this.height,
    this.padding,
  });

  final void Function()? onPressed;
  final Widget child;
  final double? height;
  final bool isSecondary;
  final double? borderRadius;
  final bool enabled;
  final double? padding;
  final bool isDone;
  final bool isLoading;

  final TextStyle? customTextStyle;

  final ButtonStyle? customButtonStyle;

  final Color? backgroundColor;

  final Color? foregroundColor;

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: enabled ? onPressed : null,
      style: isSecondary
          ? null
          : customButtonStyle ??
              ButtonStyle(
                textStyle: MaterialStateProperty.all(
                  customTextStyle ??
                      context.bodyMedium.copyWith(
                        fontSize: 16,
                        color: foregroundColor,
                      ),
                ),
                foregroundColor: MaterialStateProperty.all(
                  isSecondary
                      ? Colors.black
                      : enabled
                          ? foregroundColor ?? Colors.white
                          : Colors.black,
                ),
                backgroundColor: MaterialStateProperty.resolveWith<Color>(
                    (Set<MaterialState> states) {
                  return enabled
                      ? backgroundColor ?? ColorsManager.primaryColor
                      : Colors.grey;
                }),
                shape: MaterialStateProperty.all(
                  RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(borderRadius ?? 20),
                  ),
                ),
                fixedSize: MaterialStateProperty.all(
                  const Size.fromHeight(50),
                ),
                padding: MaterialStateProperty.all(
                  EdgeInsets.all(padding ?? 10),
                ),
                minimumSize: MaterialStateProperty.all(
                  const Size.fromHeight(50),
                ),
              ),
      child: SizedBox(
        height: height ?? 50,
        child: Center(
          child: isLoading
              ? const SizedBox.square(
                  dimension: 24,
                  child: CircularProgressIndicator(
                    color: Colors.white,
                  ),
                )
              : isDone
                  ? const Icon(
                      Icons.check_circle_outline,
                      color: Colors.white,
                    )
                  : child,
        ),
      ),
    );
  }
}
