/*
 This file is part of TALER
 (C) 2016 GNUnet e.V.
 TALER 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, or (at your option) any later version.
 TALER 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
 TALER; see the file COPYING.  If not, see 
 */
import {
  amountFractionalBase, Amounts,
  Balance, BalancesResponse,
  i18n
} from "@gnu-taler/taler-util";
import { JSX } from "preact";
import { ButtonPrimary, Centered, WalletBox } from "../components/styled/index";
import { BalancesHook, useBalances } from "../hooks/useBalances";
import { PageLink, renderAmount } from "../renderHtml";
export function BalancePage({ goToWalletManualWithdraw }: { goToWalletManualWithdraw: () => void }) {
  const balance = useBalances()
  return 
}
export interface BalanceViewProps {
  balance: BalancesHook;
  Linker: typeof PageLink;
  goToWalletManualWithdraw: () => void;
}
export function BalanceView({ balance, Linker, goToWalletManualWithdraw }: BalanceViewProps) {
  if (!balance) {
    return 
  }
  if (balance.hasError) {
    return (
      
        {i18n.str`Error: could not retrieve balance information.`}
        
          Click here for help and
          diagnostics.
        
       
    )
  }
  if (balance.response.balances.length === 0) {
    return (
      
        You have no balance to show. Need some{" "}
        help getting started?
      
    )
  }
  return 
}
function formatPending(entry: Balance): JSX.Element {
  let incoming: JSX.Element | undefined;
  let payment: JSX.Element | undefined;
  const available = Amounts.parseOrThrow(entry.available);
  const pendingIncoming = Amounts.parseOrThrow(entry.pendingIncoming);
  const pendingOutgoing = Amounts.parseOrThrow(entry.pendingOutgoing);
  if (!Amounts.isZero(pendingIncoming)) {
    incoming = (
      
        
          {"+"}
          {renderAmount(entry.pendingIncoming)}
        {" "}
        incoming
      
    );
  }
  const l = [incoming, payment].filter((x) => x !== undefined);
  if (l.length === 0) {
    return ;
  }
  if (l.length === 1) {
    return ({l});
  }
  return (
    
      ({l[0]}, {l[1]})
    
  );
}
function ShowBalances({ wallet, onWithdraw }: { wallet: BalancesResponse, onWithdraw: () => void }) {
  return 
    
      {wallet.balances.map((entry) => {
        const av = Amounts.parseOrThrow(entry.available);
        const v = av.value + av.fraction / amountFractionalBase;
        return (
          
            
              {v}{" "}
              {av.currency}
            
            {formatPending(entry)}
          
        );
      })}
    
    
  
}