#
#   Imandra Bank
#   
#   currency.py
#


class CurrencySymbol:
   EUR = 1
   USD = 2
   GBP = 3
   JPY = 4
   CNY = 5
   INR = 6
   AUD = 7
   CAD = 8
   CHF = 9
   NZD = 10

class CurrencyPairs:
  """ CurrencyPairs class to represent a collection of currency pairs """

  def __init__ (self, pairs):    
    """ Initialize with a dictionary of currency pairs """

    self._pairs = pairs

  def convert(self, from_currency: int, to_currency: int, amount: float) -> float:
    """ Convert an amount from one currency to another """

    if from_currency == to_currency:
      return amount

    pair_key = (from_currency.name, to_currency.name)
    if pair_key not in self._pairs:
      raise ValueError(f"Currency pair {pair_key} not found")

    rate = self._pairs[pair_key]
    return amount * rate

  def __repr__(self):
    """ String representation of the currency pairs """
    return ""

if __name__ == "__main__":

  rates = {
    (CurrencySymbol.EUR, CurrencySymbol.USD): 1.1,
    (CurrencySymbol.USD, CurrencySymbol.EUR): 0.9,
    (CurrencySymbol.GBP, CurrencySymbol.USD): 1.3,
    (CurrencySymbol.USD, CurrencySymbol.GBP): 0.77,
    (CurrencySymbol.JPY, CurrencySymbol.USD): 0.009,
    (CurrencySymbol.USD, CurrencySymbol.JPY): 110.0,
    (CurrencySymbol.CNY, CurrencySymbol.USD): 0.15,
    (CurrencySymbol.USD, CurrencySymbol.CNY): 6.5,
    (CurrencySymbol.INR, CurrencySymbol.USD): 0.013,
    (CurrencySymbol.USD, CurrencySymbol.INR): 75.0,
    (CurrencySymbol.AUD, CurrencySymbol.USD): 0.7,
    (CurrencySymbol.USD, CurrencySymbol.AUD): 1.4,
    (CurrencySymbol.CAD, CurrencySymbol.USD): 0.8,
    (CurrencySymbol.USD, CurrencySymbol.CAD): 1.25,
    (CurrencySymbol.CHF, CurrencySymbol.USD): 1.05,
    (CurrencySymbol.USD, CurrencySymbol.CHF): 0.95,
    (CurrencySymbol.NZD, CurrencySymbol.USD): 0.65,
    (CurrencySymbol.USD, CurrencySymbol.NZD): 1.54
  }

  pairs = CurrencyPairs(rates)

  pairs.convert(CurrencySymbol.EUR, CurrencySymbol.USD, 100)  # Should return 110.0
  pairs.convert(CurrencySymbol.USD, CurrencySymbol.EUR, 100)  # Should return 90.0
  pairs.convert(CurrencySymbol.GBP, CurrencySymbol.USD, 100)  # Should return 130.0
  pairs.convert(CurrencySymbol.USD, CurrencySymbol.GBP, 100)  # Should return 77.0
  pairs.convert(CurrencySymbol.JPY, CurrencySymbol.USD, 100)  # Should return 0.9
  pairs.convert(CurrencySymbol.USD, CurrencySymbol.JPY, 100)  # Should return 11000.0