// Copyright (C) 2023 WYATT GROUP
// Please see the AUTHORS file for details.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.

import 'package:flutter/material.dart';
import 'package:wyatt_ui_components/wyatt_ui_components.dart';
import 'package:wyatt_ui_kit/wyatt_ui_kit.dart';

enum TextType {
  title,
  subtitle,
  body;
}

class CardText extends StatelessWidget {
  const CardText(
    this.text, {
    required this.textType,
    this.style,
    this.gradientColors,
    super.key,
  });

  final TextWrapper text;
  final TextType textType;
  final TextStyle? style;
  final MultiColor? gradientColors;

  TextStyle? _getStyle(BuildContext context) {
    if (style != null) {
      return style;
    } else {
      final cardThemeExtension =
          Theme.of(context).extension<CardThemeExtension>();
      switch (textType) {
        case TextType.title:
          return cardThemeExtension?.title ?? context.textTheme.titleLarge;
        case TextType.subtitle:
          return cardThemeExtension?.subtitle ?? context.textTheme.titleMedium;
        case TextType.body:
          return cardThemeExtension?.body ?? context.textTheme.bodyMedium;
      }
    }
  }

  @override
  Widget build(BuildContext context) => Text(
        text.data,
        style: _getStyle(context),
        textAlign: text.textAlign,
        textDirection: text.textDirection,
        softWrap: text.softWrap,
        overflow: text.overflow,
        maxLines: text.maxLines,
        selectionColor: text.selectionColor,
      ).toGradient(gradientColors: gradientColors);
}
