import { useState } from 'react'
import { useGen6 } from '@/contexts/gen6-context'
import { BN } from 'bn.js'
import { useQuery } from '@tanstack/react-query'
function ParkingManager() {
const { currentAccount, api } = useGen6()
const [parkAmount, setParkAmount] = useState('')
const [unparkAmount, setUnparkAmount] = useState('')
// Query account balance
const { data: balance } = useQuery({
queryKey: ['balance', address],
queryFn: async () => {
const accountInfo = await api.query.system.account(currentAccount.address)
return accountInfo.data
},
enabled: !!currentAccount
})
const handlePark = async () => {
if (!parkAmount || !currentAccount) return
const decimals = api.registry.chainDecimals[0]
const amountBN = new BN(parkAmount).mul(new BN(10).pow(new BN(decimals)))
const extrinsic = api.tx.parking.park(amountBN)
await extrinsic.signAndSend(currentAccount.address, ({ status, events }) => {
if (status.isInBlock) {
console.log('Parked successfully')
setParkAmount('')
}
})
}
const handleUnpark = async () => {
if (!unparkAmount || !currentAccount) return
const decimals = api.registry.chainDecimals[0]
const amountBN = new BN(unparkAmount).mul(new BN(10).pow(new BN(decimals)))
const extrinsic = api.tx.parking.unpark(amountBN)
await extrinsic.signAndSend(currentAccount.address, ({ status, events }) => {
if (status.isInBlock) {
console.log('Unpark requested successfully')
setUnparkAmount('')
}
})
}
const handleWithdraw = async () => {
if (!currentAccount) return
const extrinsic = api.tx.parking.unfreeze(currentAccount.address)
await extrinsic.signAndSend(currentAccount.address, ({ status, events }) => {
if (status.isInBlock) {
console.log('Withdrawal successful')
}
})
}
if (!balance) return <div>Loading...</div>
const transferable = balance.free.sub(balance.miscFrozen)
return (
<div>
<h3>Parking Manager</h3>
<p>Transferable Balance: {transferable.toString()} GEN6</p>
<div>
<input
type="number"
value={parkAmount}
onChange={(e) => setParkAmount(e.target.value)}
placeholder="Amount to park"
/>
<button onClick={handlePark}>Park Tokens</button>
</div>
<div>
<input
type="number"
value={unparkAmount}
onChange={(e) => setUnparkAmount(e.target.value)}
placeholder="Amount to unpark"
/>
<button onClick={handleUnpark}>Unpark Tokens</button>
</div>
<button onClick={handleWithdraw}>Withdraw Unfrozen Tokens</button>
</div>
)
}