/* 
 * 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/wallets/crypto_currency/coins/bitcoin.dart';
import 'package:stackwallet/wallets/crypto_currency/coins/bitcoincash.dart';
import 'package:stackwallet/wallets/crypto_currency/coins/dogecoin.dart';
import 'package:stackwallet/wallets/crypto_currency/coins/epiccash.dart';
import 'package:stackwallet/wallets/crypto_currency/coins/ethereum.dart';
import 'package:stackwallet/wallets/crypto_currency/coins/firo.dart';
import 'package:stackwallet/wallets/crypto_currency/coins/litecoin.dart';
import 'package:stackwallet/wallets/crypto_currency/coins/monero.dart';
import 'package:stackwallet/wallets/crypto_currency/coins/namecoin.dart';
import 'package:stackwallet/wallets/crypto_currency/coins/particl.dart';
import 'package:stackwallet/wallets/crypto_currency/coins/wownero.dart';
import 'package:stackwallet/wallets/crypto_currency/crypto_currency.dart';

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

  if (assets is ThemeAssets) {
    switch (coin.runtimeType) {
      case const (Bitcoin):
        return assets.bitcoin;
      case const (Litecoin):
        return assets.litecoin;
      case const (Bitcoincash):
        return assets.bitcoincash;
      case const (Dogecoin):
        return assets.dogecoin;
      case const (Epiccash):
        return assets.epicCash;
      case const (Firo):
        return assets.firo;
      case const (Monero):
        return assets.monero;
      case const (Wownero):
        return assets.wownero;
      case const (Namecoin):
        return assets.namecoin;
      case const (Particl):
        return assets.particl;
      case const (Ethereum):
        return assets.ethereum;
      default:
        return assets.stackIcon;
    }
  } else if (assets is ThemeAssetsV2) {
    return (assets).coinIcons[coin.mainNetId]!;
  } else {
    return (assets as ThemeAssetsV3).coinIcons[coin.mainNetId]!;
  }
});