import 'package:didvan/config/theme_data.dart';
import 'package:didvan/views/widgets/didvan/text.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';

class MenuOption extends StatelessWidget {
  final String? title;
  final Widget? titleWidget;
  final IconData? icon;
  final Widget? iconWidget;
  final double iconSize;
  final String? suffix;
  final VoidCallback onTap;
  final Widget? trailing;
  final Color? color;

  MenuOption({
    Key? key,
    required this.onTap,
    this.title,
    this.icon,
    this.iconWidget,
    this.suffix,
    this.color,
    this.trailing,
    this.titleWidget,
    this.iconSize = 18,
  }) : super(key: key) {
    if (title == null && titleWidget == null) {
      throw Exception("MenuOption must have a title or titleWidget");
    }
  }

  @override
  Widget build(BuildContext context) {
    final ThemeData theme = Theme.of(context);
    final Color effectiveTitleColor = color ?? theme.colorScheme.title;

    Widget? displayIcon;
    if (iconWidget != null) {
      displayIcon = iconWidget;
    } else if (icon != null) {
      displayIcon = Icon(icon, size: iconSize, color: effectiveTitleColor);
    }

    return GestureDetector(
      onTap: onTap,
      child: Container(
        color: Colors.transparent,
        padding: const EdgeInsets.symmetric(vertical: 0.0),
        child: Padding(
          padding: const EdgeInsets.only(right: 8),
          child: Row(
            children: [
              if (displayIcon != null) displayIcon,
              if (displayIcon != null) const SizedBox(width: 4),
              if (titleWidget != null)
                titleWidget!
              else
                DidvanText(
                  title!,
                  color: effectiveTitleColor,
                ),
              const Spacer(),
              if (suffix != null)
                Padding(
                  padding: const EdgeInsets.only(left: 10.0),
                  child: DidvanText(
                    suffix!,
                    style: theme.textTheme.titleSmall!
                        .copyWith(fontWeight: FontWeight.w400),
                    color: theme.colorScheme.primary,
                  ),
                ),
              Padding(
                padding: const EdgeInsets.only(left: 8),
                child: trailing ??
                    SvgPicture.asset(
                      'lib/assets/icons/arrow-left.svg',
                      color: const Color.fromARGB(255, 102, 102, 102),
                    ),
              )
            ],
          ),
        ),
      ),
    );
  }
}
