/* 
 * This file is part of Stack Wallet.
 * 
 * Copyright (c) 2023 Cypher Stack
 * All Rights Reserved.
 * The code is distributed under GPLv3 license, see LICENSE file for details.
 * Generated by Cypher Stack on 2023-05-26
 *
 */

import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:stackwallet/models/isar/stack_theme.dart';
import 'package:stackwallet/themes/theme_providers.dart';
import 'package:stackwallet/utilities/enums/coin_enum.dart';

final coinImageProvider = Provider.family<String, Coin>((ref, coin) {
  final assets = ref.watch(themeAssetsProvider);

  // TODO: handle this differently by adding proper frost assets to themes
  if (coin == Coin.bitcoinFrost) {
    coin = Coin.bitcoin;
  } else if (coin == Coin.bitcoinFrostTestNet) {
    coin = Coin.bitcoinTestNet;
  }

  if (assets is ThemeAssets) {
    switch (coin) {
      case Coin.bitcoin:
        return assets.bitcoinImage;
      case Coin.litecoin:
      case Coin.litecoinTestNet:
        return assets.litecoinImage;
      case Coin.bitcoincash:
        return assets.bitcoincashImage;
      case Coin.dogecoin:
        return assets.dogecoinImage;
      case Coin.eCash:
        return assets.bitcoinImage;
      case Coin.epicCash:
        return assets.epicCashImage;
      case Coin.firo:
        return assets.firoImage;
      case Coin.monero:
        return assets.moneroImage;
      case Coin.wownero:
        return assets.wowneroImage;
      case Coin.namecoin:
        return assets.namecoinImage;
      case Coin.particl:
        return assets.particlImage;
      case Coin.bitcoinTestNet:
        return assets.bitcoinImage;
      case Coin.bitcoincashTestnet:
        return assets.bitcoincashImage;
      case Coin.firoTestNet:
        return assets.firoImage;
      case Coin.dogecoinTestNet:
        return assets.dogecoinImage;
      case Coin.ethereum:
        return assets.ethereumImage;
      default:
        return assets.stackIcon;
    }
  } else if (assets is ThemeAssetsV2) {
    return (assets).coinImages[coin.mainNetVersion]!;
  } else {
    return (assets as ThemeAssetsV3).coinImages[coin.mainNetVersion]!;
  }
});

final coinImageSecondaryProvider = Provider.family<String, Coin>((ref, coin) {
  final assets = ref.watch(themeAssetsProvider);

  // TODO: handle this differently by adding proper frost assets to themes
  if (coin == Coin.bitcoinFrost) {
    coin = Coin.bitcoin;
  } else if (coin == Coin.bitcoinFrostTestNet) {
    coin = Coin.bitcoinTestNet;
  }

  if (assets is ThemeAssets) {
    switch (coin) {
      case Coin.bitcoin:
        return assets.bitcoinImageSecondary;
      case Coin.litecoin:
      case Coin.litecoinTestNet:
        return assets.litecoinImageSecondary;
      case Coin.bitcoincash:
        return assets.bitcoincashImageSecondary;
      case Coin.dogecoin:
        return assets.dogecoinImageSecondary;
      case Coin.eCash:
        return assets.bitcoinImageSecondary;
      case Coin.epicCash:
        return assets.epicCashImageSecondary;
      case Coin.firo:
        return assets.firoImageSecondary;
      case Coin.monero:
        return assets.moneroImageSecondary;
      case Coin.wownero:
        return assets.wowneroImageSecondary;
      case Coin.namecoin:
        return assets.namecoinImageSecondary;
      case Coin.particl:
        return assets.particlImageSecondary;
      case Coin.bitcoinTestNet:
        return assets.bitcoinImageSecondary;
      case Coin.bitcoincashTestnet:
        return assets.bitcoincashImageSecondary;
      case Coin.firoTestNet:
        return assets.firoImageSecondary;
      case Coin.dogecoinTestNet:
        return assets.dogecoinImageSecondary;
      case Coin.ethereum:
        return assets.ethereumImageSecondary;

      default:
        return assets.stackIcon;
    }
  } else if (assets is ThemeAssetsV2) {
    return (assets).coinSecondaryImages[coin.mainNetVersion]!;
  } else {
    return (assets as ThemeAssetsV3).coinSecondaryImages[coin.mainNetVersion]!;
  }
});