// 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:google_fonts/google_fonts.dart';
import 'package:wyatt_ui_components/wyatt_ui_components.dart';
import 'package:wyatt_ui_kit/wyatt_ui_kit.dart';

class CardTheme extends CardThemeExtension {
  const CardTheme({
    super.backgroundColors,
    super.body,
    super.borderColors,
    super.secondaryBackgroundColor,
    super.shadowColor,
    super.subtitle,
    super.title,
  });

  factory CardTheme.light() => CardTheme(
        backgroundColors: const MultiColor.single(Color(0xFFF6F6F6)),
        secondaryBackgroundColor: Colors.white,
        borderColors: const MultiColor([
          Color(0xFFDDE0E3),
          Color(0xFFCACCD4),
        ]),
        title: GoogleFonts.montserrat(
          fontSize: 24,
          fontWeight: FontWeight.w500,
          color: const Color(0xFF24262A),
        ),
        subtitle: GoogleFonts.montserrat(
          fontSize: 15,
          fontWeight: FontWeight.w300,
          color: const Color(0xFF24262A),
        ),
        body: GoogleFonts.montserrat(
          fontSize: 12,
          fontWeight: FontWeight.w300,
          height: 1.7,
          color: const Color(0xFF24262A),
        ),
      );

  factory CardTheme.dark() => CardTheme(
        backgroundColors:
            MultiColor.single(const Color(0xFFFFFFFF).withOpacity(0.04)),
        secondaryBackgroundColor: const Color(0xFFFFFFFF).withOpacity(0.04),
        borderColors: const MultiColor([
          Color(0xFF60656A),
          Color(0xFF383C40),
        ]),
        title: GoogleFonts.montserrat(
          fontSize: 24,
          fontWeight: FontWeight.w500,
          color: const Color(0xFFFFFFFF),
        ),
        subtitle: GoogleFonts.montserrat(
          fontSize: 15,
          fontWeight: FontWeight.w300,
          color: const Color(0xFFFFFFFF),
        ),
        body: GoogleFonts.montserrat(
          fontSize: 12,
          fontWeight: FontWeight.w300,
          height: 1.7,
          color: const Color(0xFFFFFFFF),
        ),
      );

  @override
  ThemeExtension<CardThemeExtension> copyWith({
    MultiColor? backgroundColors,
    Color? secondaryBackgroundColor,
    MultiColor? borderColors,
    BoxShadow? shadowColor,
    TextStyle? body,
    TextStyle? title,
    TextStyle? subtitle,
  }) =>
      CardTheme(
        backgroundColors: backgroundColors ?? this.backgroundColors,
        secondaryBackgroundColor:
            secondaryBackgroundColor ?? this.secondaryBackgroundColor,
        borderColors: borderColors ?? this.borderColors,
        shadowColor: shadowColor ?? this.shadowColor,
        body: body ?? this.body,
        title: title ?? this.title,
        subtitle: subtitle ?? this.subtitle,
      );

  @override
  ThemeExtension<CardThemeExtension> lerp(
    covariant ThemeExtension<CardThemeExtension>? other,
    double t,
  ) {
    if (other is! CardTheme) {
      return this;
    }
    return CardTheme(
      backgroundColors: other.backgroundColors,
      secondaryBackgroundColor: Color.lerp(
        secondaryBackgroundColor,
        other.secondaryBackgroundColor,
        t,
      ),
      borderColors: other.borderColors,
      shadowColor: BoxShadow.lerp(shadowColor, other.shadowColor, t),
      body: TextStyle.lerp(body, other.body, t),
      title: TextStyle.lerp(title, other.title, t),
      subtitle: TextStyle.lerp(subtitle, other.subtitle, t),
    );
  }
}
