import 'package:flutter/material.dart';
// Color resolution now relies on Theme ColorScheme.

/// 배경에 따라 자동으로 색상 대비를 조정하는 텍스트 위젯
class ThemedText extends StatelessWidget {
  final String text;
  final TextStyle? style;
  final TextAlign? textAlign;
  final TextOverflow? overflow;
  final int? maxLines;
  final bool softWrap;
  final bool forceLight;
  final bool forceDark;
  final double? opacity;
  final double? fontSize;
  final FontWeight? fontWeight;
  final double? letterSpacing;
  final Color? color;

  const ThemedText(
    this.text, {
    super.key,
    this.style,
    this.textAlign,
    this.overflow,
    this.maxLines,
    this.softWrap = true,
    this.forceLight = false,
    this.forceDark = false,
    this.opacity,
    this.fontSize,
    this.fontWeight,
    this.letterSpacing,
    this.color,
  });

  /// 배경 밝기에 따른 텍스트 색상 결정
  static Color getContrastColor(
    BuildContext context, {
    bool forceLight = false,
    bool forceDark = false,
  }) {
    final scheme = Theme.of(context).colorScheme;
    if (forceLight) return scheme.onPrimary; // typically white
    if (forceDark) return scheme.onSurface; // dark text in light theme

    // 기본: 스킴의 onSurface 사용(라이트/다크 자동 대비)
    return scheme.onSurface;
  }

  @override
  Widget build(BuildContext context) {
    final textColor = color ??
        getContrastColor(
          context,
          forceLight: forceLight,
          forceDark: forceDark,
        );

    final finalColor =
        opacity != null ? textColor.withValues(alpha: opacity!) : textColor;

    final defaultStyle = DefaultTextStyle.of(context).style;

    // 개별 스타일 속성들을 병합
    final baseStyle = TextStyle(
      fontSize: fontSize,
      fontWeight: fontWeight,
      letterSpacing: letterSpacing,
      color: finalColor,
    );

    final effectiveStyle = defaultStyle.merge(baseStyle).merge(style);

    return Text(
      text,
      style: effectiveStyle,
      textAlign: textAlign,
      overflow: overflow,
      maxLines: maxLines,
      softWrap: softWrap,
    );
  }

  /// 제목용 스타일 팩토리
  static ThemedText headline({
    required String text,
    TextStyle? style,
    bool forceLight = false,
    bool forceDark = false,
  }) {
    return ThemedText(
      text,
      style: const TextStyle(
        fontSize: 24,
        fontWeight: FontWeight.bold,
      ).merge(style),
      forceLight: forceLight,
      forceDark: forceDark,
    );
  }

  /// 부제목용 스타일 팩토리
  static ThemedText subtitle({
    required String text,
    TextStyle? style,
    bool forceLight = false,
    bool forceDark = false,
    double opacity = 0.8,
  }) {
    return ThemedText(
      text,
      style: const TextStyle(
        fontSize: 16,
        fontWeight: FontWeight.w500,
      ).merge(style),
      forceLight: forceLight,
      forceDark: forceDark,
      opacity: opacity,
    );
  }

  /// 본문용 스타일 팩토리
  static ThemedText body({
    required String text,
    TextStyle? style,
    bool forceLight = false,
    bool forceDark = false,
    double opacity = 0.9,
  }) {
    return ThemedText(
      text,
      style: const TextStyle(
        fontSize: 14,
        fontWeight: FontWeight.normal,
      ).merge(style),
      forceLight: forceLight,
      forceDark: forceDark,
      opacity: opacity,
    );
  }

  /// 캡션용 스타일 팩토리
  static ThemedText caption({
    required String text,
    TextStyle? style,
    bool forceLight = false,
    bool forceDark = false,
    double opacity = 0.7,
  }) {
    return ThemedText(
      text,
      style: const TextStyle(
        fontSize: 12,
        fontWeight: FontWeight.normal,
      ).merge(style),
      forceLight: forceLight,
      forceDark: forceDark,
      opacity: opacity,
    );
  }
}
