import { 
  getLatestTransactionsFromExplorer,
  formatNumber,
  formatAddress,
  parseHexToDecimal,
  formatTableTime
} from '../src';

/**
 * Display transactions in a formatted table
 */
async function displayTransactions() {
  try {
    console.log('\n🔍 Fetching latest transactions from Exatechl2 blockchain...');

    // Pagination parameters
    const page = 1;
    const perPage = 10;

    // Get paginated transactions from the blockchain explorer
    const { transactions, totalCount, totalPages } = await getLatestTransactionsFromExplorer(page, perPage);

    // Format and display transaction data in a table
    console.log(`\n📊 Latest Transactions (Page ${page}/${totalPages}, Total: ${formatNumber(totalCount)})`);
    console.log('─'.repeat(150));
    console.log(
      'Hash'.padEnd(20) +
      'Method'.padEnd(15) +
      'Block'.padEnd(10) +
      'Age'.padEnd(35) +
      'From'.padEnd(20) +
      'To'.padEnd(20) +
      'Value'.padEnd(15) +
      'Txn Fee'.padEnd(15) +
      'Status'.padEnd(10)
    );
    console.log('─'.repeat(150));

    transactions.forEach((tx: any) => {
      // Handle block number display (convert hex to decimal if needed)
      let blockDisplay = tx.blockNumber || 'Pending';
      if (typeof blockDisplay === 'string' && blockDisplay.startsWith('0x')) {
        blockDisplay = parseHexToDecimal(blockDisplay);
      }
      
      // Directly use value and txFee strings if they're already formatted
      let valueDisplay = tx.value || '0';
      let feeDisplay = tx.txFee || '0';
      
      // Use the proper table-optimized time formatter (a shorter version of formatRelativeTime)
      let ageDisplay = 'Unknown';
      if (tx.timestamp) {
        ageDisplay = formatTableTime(tx.timestamp);
      }
      
      console.log(
        formatAddress(tx.hash).padEnd(20) +
        (tx.methodDisplayName || (tx.method && tx.method.split('(')[0]) || 'Transfer').padEnd(15) +
        String(blockDisplay).padEnd(10) +
        ageDisplay.padEnd(35) +
        formatAddress(tx.from).padEnd(20) +
        formatAddress(tx.to || 'Contract Creation').padEnd(20) +
        valueDisplay.padEnd(15) +
        feeDisplay.padEnd(15) +
        (tx.status === 'success' ? '✅ Success' : (tx.status === 'failed' ? '❌ Failed' : '⏳ Pending')).padEnd(10)
      );
    });
    console.log('─'.repeat(150));
    console.log(`Showing ${transactions.length} of ${formatNumber(totalCount)} transactions\n`);

  } catch (error) {
    console.error('❌ Error fetching transactions:', error instanceof Error ? error.message : error);
  }
}

// Main function to run example
async function main() {
  console.log('='.repeat(150));
  console.log('📚 BLOCKCHAIN-API EXAMPLE: LIST TRANSACTIONS');
  console.log('='.repeat(150));
  
  await displayTransactions();
  
  console.log('\n✅ Example complete');
}

// Run the example
main().catch(console.error); 