import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { ChevronRight, Shield, LogIn } from 'lucide-react'; import { usePezkuwi } from '../contexts/PezkuwiContext'; import { useWallet } from '../contexts/WalletContext'; import { formatBalance } from '@pezkuwi/lib/wallet'; import { getTrustScore } from '@pezkuwi/lib/scores'; import { getCurrentEra } from '@pezkuwi/lib/staking'; const HeroSection: React.FC = () => { const { t } = useTranslation(); const navigate = useNavigate(); const { api, isApiReady, assetHubApi, isAssetHubReady, peopleApi } = usePezkuwi(); const { selectedAccount } = useWallet(); const [stats, setStats] = useState({ activeProposals: 0, totalVoters: 0, tokensStaked: '0', trustScore: null as number | null }); // Fetch governance stats from Relay Chain useEffect(() => { const fetchGovernanceStats = async () => { if (!api || !isApiReady) return; let activeProposals = 0; try { const entries = await api.query.referenda.referendumInfoFor.entries(); activeProposals = entries.filter(([, info]) => { const data = info.toJSON(); return data && typeof data === 'object' && 'ongoing' in data; }).length; } catch (err) { if (import.meta.env.DEV) console.warn('Failed to fetch referenda:', err); } let totalVoters = 0; try { const votingKeys = await api.query.convictionVoting.votingFor.keys(); const uniqueAccounts = new Set(votingKeys.map(key => key.args[0].toString())); totalVoters = uniqueAccounts.size; } catch (err) { if (import.meta.env.DEV) console.warn('Failed to fetch voters:', err); } setStats(prev => ({ ...prev, activeProposals, totalVoters })); }; fetchGovernanceStats(); }, [api, isApiReady]); // Fetch staking stats from Asset Hub useEffect(() => { const fetchStakingStats = async () => { if (!assetHubApi || !isAssetHubReady) return; let tokensStaked = '0'; try { const eraIndex = await getCurrentEra(assetHubApi); if (eraIndex > 0) { const totalStake = await assetHubApi.query.staking.erasTotalStake(eraIndex); const formatted = formatBalance(totalStake.toString()); const [whole, frac] = formatted.split('.'); const formattedWhole = Number(whole).toLocaleString(); const formattedFrac = (frac || '00').slice(0, 2); tokensStaked = `${formattedWhole}.${formattedFrac} HEZ`; } } catch (err) { if (import.meta.env.DEV) console.warn('Failed to fetch total stake from AH:', err); } setStats(prev => ({ ...prev, tokensStaked })); }; fetchStakingStats(); }, [assetHubApi, isAssetHubReady]); // Fetch trust score from People Chain useEffect(() => { const fetchTrustScore = async () => { if (!selectedAccount?.address) { setStats(prev => ({ ...prev, trustScore: null })); return; } if (!peopleApi) return; try { const score = await getTrustScore(peopleApi, selectedAccount.address); setStats(prev => ({ ...prev, trustScore: score })); } catch (err) { if (import.meta.env.DEV) console.warn('Failed to fetch trust score:', err); setStats(prev => ({ ...prev, trustScore: 0 })); } }; fetchTrustScore(); }, [peopleApi, selectedAccount]); return (
{/* Background Image */}
DKstate Background
{/* Content */}
Digital Kurdistan State v1.0

PezkuwiChain

{t('hero.title', 'Blockchain Governance Platform')}

{t('hero.subtitle', 'Democratic and transparent governance with blockchain technology')}

{stats.activeProposals}
{t('hero.stats.activeProposals', 'Active Proposals')}
{stats.totalVoters.toLocaleString()}
{t('hero.stats.totalVoters', 'Total Voters')}
{stats.tokensStaked}
{t('hero.stats.tokensStaked', 'Tokens Staked')}
{stats.trustScore !== null ? (
{stats.trustScore}
) : ( )}
{t('hero.stats.trustScore', 'Trust Score')}
); }; export default HeroSection;