"use client" import { useState } from "react" import Link from "next/link" import { ArrowLeft, CheckCircle, Loader2, ShieldCheck, Upload, User, ChevronRight, Info, Shield } from "lucide-react" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Alert, AlertTitle, AlertDescription } from "@/components/ui/alert" import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs" import { Checkbox } from "@/components/ui/checkbox" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { useWalletStore } from "@/lib/wallet-store" import { Badge } from "@/components/ui/badge" import { Separator } from "@/components/ui/separator" import { usePrivadoId } from "@/lib/privado-id" import { countries } from "@/lib/countries" import { verifyIdentity } from "@/lib/identity-client" export default function VerifyPage() { const { walletConnected, isVerified, username, connectWallet, setVerificationDetails } = useWalletStore() const [country, setCountry] = useState("") const [privadoID, setPrivadoID] = useState("") const [selfAttestedEligible, setSelfAttestedEligible] = useState(false) const [isVerifying, setIsVerifying] = useState(false) const [verificationComplete, setVerificationComplete] = useState(false) const [verificationError, setVerificationError] = useState(null) const [citizenshipVerified, setCitizenshipVerified] = useState(false) const [eligibilityVerified, setEligibilityVerified] = useState(false) const { verifyIdentity: verifyWithPrivadoId, isLoading: isPrivadoVerifying } = usePrivadoId() const handleCountryChange = (value: string) => { setCountry(value); // Reset verification state when country changes setSelfAttestedEligible(false); setCitizenshipVerified(false); }; const handlePrivadoVerification = async () => { try { if (!privadoID) { setVerificationError("Please enter your Privado ID"); return false; } const isVerified = await verifyWithPrivadoId(); setCitizenshipVerified(isVerified); return isVerified; } catch (error) { setVerificationError("Failed to verify with Privado ID"); return false; } }; const handleVerification = async () => { setIsVerifying(true); setVerificationError(null); try { // Build userData based on country selection const userData: Record = {}; if (country === "US") { // For US verification, we need Privado ID and self-attestation if (!citizenshipVerified) { const privadoVerified = await handlePrivadoVerification(); if (!privadoVerified) { setIsVerifying(false); return; } } userData.privadoID = privadoID; userData.selfAttestedEligible = selfAttestedEligible ? "true" : "false"; } else { // For other countries, just use self-attestation userData.selfAttestedEligible = selfAttestedEligible ? "true" : "false"; } // Call the verification API const result = await verifyIdentity({ country, userData }); // Update local state to reflect verification result setCitizenshipVerified(result.citizenshipVerified); setEligibilityVerified(result.eligibilityVerified); // Update wallet store with verification status setVerificationDetails( country, result.citizenshipVerified, result.eligibilityVerified, result.status ); setVerificationComplete(true); } catch (error) { console.error("Verification failed:", error); setVerificationError("Verification failed. Please try again."); } finally { setIsVerifying(false); } }; if (!walletConnected) { return (

Connect Your Wallet

Please connect your wallet before verifying your identity.

) } if (isVerified && !verificationComplete) { return (

Already Verified

Your account is already verified and has full access to submit perspectives and influence legislation.

) } if (verificationComplete) { return (

Verification Complete!

{citizenshipVerified && eligibilityVerified ? (

You're fully verified and can influence outcomes.

Your account now has full access to submit perspectives, vote on insights, and influence legislation.

) : citizenshipVerified ? (

Citizenship confirmed. You can participate fully once eligibility is attested.

Your citizenship is verified. Complete your eligibility attestation to gain full participation privileges.

) : (

Your identity has been verified. You now have access to submit perspectives and influence legislation.

)}
) } return (

Verify Your Identity

Verification allows your perspectives to influence official metrics and legislation.

Why Verify?

Verified users have unlimited submissions, their perspectives count towards official metrics, and they can influence the consensus process for legislation.

Identity Verification Complete verification to gain full access to the platform {verificationError && ( {verificationError} )}

Select the country where you are a citizen and eligible to vote.

{country && (
{country === "US" ? (

United States Verification

Verify your citizenship with Privado ID and attest to your eligibility.

setPrivadoID(e.target.value)} className="w-full" />
{citizenshipVerified && (
setSelfAttestedEligible(!!checked)} />

False statements may result in legal consequences under penalty of perjury.

)}
) : (

{countries.find(c => c.code === country)?.name} Verification

Verification for your country is coming soon. Please self-attest.

setSelfAttestedEligible(!!checked)} />

False statements may have legal consequences.

)}
)}
) }