import type {DashboardData} from './dashboard';
import {decimalUnits} from './dashboard';

const SCALE=BigInt(10)**BigInt(18);
const normalize=(v:string)=>v.replace(/[۰-۹]/g,d=>String('۰۱۲۳۴۵۶۷۸۹'.indexOf(d))).replace(/[٠-٩]/g,d=>String('٠١٢٣٤٥٦٧٨٩'.indexOf(d))).replace(/[,٬\s]/g,'');
export function depositAmountRial(input:unknown):string|null{
 if(typeof input!=='string'||input.length>60)return null;
 const value=normalize(input);if(!/^\d{1,12}$/.test(value)||BigInt(value)<=BigInt(0))return null;
 return (BigInt(value)*BigInt(10)).toString();
}
export function isCashPosition(p:DashboardData['positions'][number]){return p.project_id===null&&(p.asset_symbol==='IRR'||p.asset_symbol==='TMN')}
export function cashWallet(positions:DashboardData['positions']){
 const rows=positions.filter(isCashPosition);if(!rows.length)return null;
 let total=BigInt(0),locked=BigInt(0);
 for(const row of rows){
  if(!/^\d+(\.\d{1,18})?$/.test(row.quantity)||!/^\d+(\.\d{1,18})?$/.test(row.locked_quantity))return null;
  const factor=row.asset_symbol==='TMN'?BigInt(10):BigInt(1),q=decimalUnits(row.quantity)*factor,l=decimalUnits(row.locked_quantity)*factor;
  if(l>q||q%SCALE!==BigInt(0)||l%SCALE!==BigInt(0))return null;
  total+=q/SCALE;locked+=l/SCALE;
 }
 return {totalRial:total,lockedRial:locked,availableRial:total-locked};
}
export type DepositHistory={id:string;amount_rial:string;status:'created'|'pending'|'credited'|'failed'|'cancelled'|'test_paid'|'pending_review';created_at:string;credited_at:string|null;reference:string|null;provider?:string;test_mode?:boolean};
