import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/palette.dart';
import 'package:cake_wallet/themes/extensions/account_list_theme.dart';
import 'package:cake_wallet/themes/extensions/address_theme.dart';
import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
import 'package:cake_wallet/themes/extensions/exchange_page_theme.dart';
import 'package:cake_wallet/themes/extensions/filter_theme.dart';
import 'package:cake_wallet/themes/extensions/indicator_dot_theme.dart';
import 'package:cake_wallet/themes/extensions/menu_theme.dart';
import 'package:cake_wallet/themes/extensions/option_tile_theme.dart';
import 'package:cake_wallet/themes/extensions/picker_theme.dart';
import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
import 'package:cake_wallet/themes/extensions/send_page_theme.dart';
import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
import 'package:cake_wallet/themes/monero_light_theme.dart';
import 'package:flutter/material.dart';

class HighContrastTheme extends MoneroLightTheme {
  HighContrastTheme({required int raw}) : super(raw: raw) {
    colorScheme = ColorScheme.fromSwatch(
        primarySwatch: Colors.grey,
        accentColor: primaryColor,
        backgroundColor: Colors.white,
        cardColor: containerColor,
        brightness: Brightness.light);
  }

  @override
  String get title => S.current.high_contrast_theme;
  @override
  Color get primaryColor => Colors.black;
  @override
  Color get containerColor => Palette.highContrastGray;
  @override
  Color get primaryTextColor => colorScheme.onBackground;
  @override
  Color get dialogBackgroundColor => Colors.white;

  @override
  CakeTextTheme get cakeTextTheme => super.cakeTextTheme.copyWith(
      buttonTextColor: Colors.white, buttonSecondaryTextColor: Colors.white.withOpacity(0.5));

  @override
  SyncIndicatorTheme get syncIndicatorStyle => super
      .syncIndicatorStyle
      .copyWith(textColor: colorScheme.background, syncedBackgroundColor: containerColor);

  @override
  BalancePageTheme get balancePageTheme => super.balancePageTheme.copyWith(
      textColor: Colors.white,
      labelTextColor: Colors.grey,
      assetTitleColor: Colors.white,
      balanceAmountColor: Colors.white);

  @override
  DashboardPageTheme get dashboardPageTheme => super.dashboardPageTheme.copyWith(
      textColor: Colors.black,
      cardTextColor: Colors.white,
      mainActionsIconColor: Colors.white,
      indicatorDotTheme:
          IndicatorDotTheme(indicatorColor: Colors.grey, activeIndicatorColor: Colors.black));

  @override
  ExchangePageTheme get exchangePageTheme => super.exchangePageTheme.copyWith(
      firstGradientTopPanelColor: primaryColor, firstGradientBottomPanelColor: containerColor);

  @override
  SendPageTheme get sendPageTheme => super.sendPageTheme.copyWith(
      templateTitleColor: Colors.white,
      templateBackgroundColor: Colors.black,
      firstGradientColor: primaryColor);

  @override
  AddressTheme get addressTheme => super.addressTheme.copyWith(actionButtonColor: Colors.grey);

  @override
  FilterTheme get filterTheme => super.filterTheme.copyWith(iconColor: Colors.white);

  @override
  CakeMenuTheme get menuTheme => super.menuTheme.copyWith(
      settingTitleColor: Colors.black,
      headerFirstGradientColor: containerColor,
      iconColor: Colors.white);

  @override
  PickerTheme get pickerTheme => super.pickerTheme.copyWith(
      searchIconColor: primaryColor,
      searchHintColor: primaryColor,
      searchTextColor: primaryColor,
      searchBackgroundFillColor: Colors.white,
      searchBorderColor: primaryColor);

  @override
  AccountListTheme get accountListTheme => super.accountListTheme.copyWith(
      tilesTextColor: Colors.black,
      tilesBackgroundColor: Colors.white,
      currentAccountBackgroundColor: containerColor,
      currentAccountTextColor: Colors.white,
      currentAccountAmountColor: Colors.white);

  @override
  ReceivePageTheme get receivePageTheme => super.receivePageTheme.copyWith(
      tilesTextColor: Colors.white, iconsBackgroundColor: Colors.grey, iconsColor: Colors.black);

  @override
  OptionTileTheme get optionTileTheme => OptionTileTheme(
      titleColor: Colors.white, descriptionColor: Colors.white, useDarkImage: false);

  @override
  ThemeData get themeData => super.themeData.copyWith(
      disabledColor: Colors.grey,
      dialogTheme: super.themeData.dialogTheme.copyWith(backgroundColor: Colors.white));
}