import 'package:flutter/material.dart';

import 'package:provider/provider.dart';

import 'package:pshared/controllers/balance_mask/wallets.dart';
import 'package:pshared/models/payment/wallet.dart';
import 'package:pshared/models/payment/chain_network.dart';
import 'package:pshared/utils/l10n/chain.dart';

import 'package:pweb/pages/dashboard/buttons/balance/add_funds.dart';
import 'package:pweb/pages/dashboard/buttons/balance/amount.dart';
import 'package:pweb/pages/dashboard/buttons/balance/config.dart';
import 'package:pweb/pages/dashboard/buttons/balance/header.dart';
import 'package:pweb/widgets/refresh_balance/wallet.dart';

import 'package:pweb/generated/i18n/app_localizations.dart';


class WalletCard extends StatelessWidget {
  final Wallet wallet;
  final VoidCallback onTopUp;
  final VoidCallback onTap;

  const WalletCard({
    super.key,
    required this.wallet,
    required this.onTopUp,
    required this.onTap,
  });

  @override
  Widget build(BuildContext context) {
    final loc = AppLocalizations.of(context)!;
    final networkLabel = (wallet.network == null || wallet.network == ChainNetwork.unspecified)
      ? null
      : wallet.network!.localizedName(context);
    final symbol = wallet.tokenSymbol?.trim();

    return Card(
      color: Theme.of(context).colorScheme.onSecondary,
      elevation: WalletCardConfig.elevation,
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(WalletCardConfig.borderRadius),
      ),
      child: InkWell(
        borderRadius: BorderRadius.circular(WalletCardConfig.borderRadius),
        onTap: onTap,
      child: SizedBox.expand(
        child: Padding(
          padding: WalletCardConfig.contentPadding,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              BalanceHeader(
                title: loc.paymentTypeCryptoWallet,
                subtitle: networkLabel,
                badge: (symbol == null || symbol.isEmpty) ? null : symbol,
              ),
              Row(
                children: [
                  BalanceAmount(
                    wallet: wallet,
                    onToggleMask: () {
                      context.read<WalletsController>().toggleBalanceMask(wallet.id);
                    },
                  ),
                  WalletBalanceRefreshButton(
                    walletRef: wallet.id,
                  ),
                ],
              ),
              BalanceAddFunds(onTopUp: onTopUp),
            ],
          ),
        ),
      ),
      ),
    );
  }
}
