import type {VerificationMetadata} from './identity-presentation';
import type {Locale} from './catalog';
export type DashboardArea='account'|'wallet';
export const dashboardSections={account:['profile','banks','security','settings','alerts','referrals','api','notifications'],wallet:['overview','assets','deposit','withdraw','transactions','orders','credit','staking','instant-credit']} as const;
export function validDashboardSection(area:DashboardArea,section:string){return (dashboardSections[area] as readonly string[]).includes(section)}
type LocalText=Partial<Record<Locale,string>>;
export type CustomerNotification={id:string;title:LocalText;body:LocalText;kind:string;read_at:string|null;created_at:string;severity?:'info'|'success'|'warning'|'error';action_url?:string|null;event_key?:string|null;sender_name?:string|null;request_id?:string|null};
export type Preferences={locale:Locale;theme:'dark'|'light';currency:'TMN'|'USDT';hide_balances:boolean;hide_small_assets:boolean;email_notifications:boolean;confirm_orders:boolean;confirm_cancellations:boolean;reduced_motion:boolean};
export const defaultPreferences:Preferences={locale:'fa',theme:'dark',currency:'TMN',hide_balances:false,hide_small_assets:false,email_notifications:false,confirm_orders:true,confirm_cancellations:true,reduced_motion:false};
export type DashboardData={
 account:VerificationMetadata&{avatar_path?:string|null;first_name:string;last_name:string;birth_date?:string|null;national_id_last4?:string|null;national_id?:string|null;national_id_editable?:boolean;verification_status:string;account_level:string;created_at:string;updated_at?:string};
 preferences:Preferences|null;
 banks:{ownership_checked_at?:string|null;card_link_status?:string;id:string;bank_name:string;account_title?:string|null;iban:string;card_last4:string|null;status:string;is_primary:boolean;created_at:string}[];
 notifications:CustomerNotification[];unread_count:number;
 alerts:{id:string;project_id:string;project_title:LocalText;direction:string;target_price_rial:string;status:string;created_at:string}[];
 referral_codes:{id:string;code:string;label:string;active:boolean;created_at:string}[];referral_stats:{count:number;reward_rial:string};
 api_keys:{id:string;label:string;key_prefix:string;scopes:string[];expires_at:string;created_at:string;revoked_at:string|null}[];
 wallets:{id:string;network:string;address:string;label:string;wallet_type?:'internal'|'public';verified_at?:string|null;chain_id?:number|null}[];
 positions:{id:string;asset_symbol:string;asset_name:LocalText;project_id:string|null;quantity:string;locked_quantity:string;value_rial:string|null;value_usdt:string|null;updated_at:string}[];
 transactions:{id:string;reference:string;kind:string;asset_symbol:string;amount:string;status:string;created_at:string}[];
 orders:{id:string;project_id:string;side:string;quantity:string;unit_price_rial:string;status:string;reference:string;created_at:string}[];
 credits:{id:string;kind:string;principal_rial:string;outstanding_rial:string;status:string;due_at:string|null}[];
 staking:{id:string;asset_symbol:string;quantity:string;accrued_reward:string;status:string;ends_at:string|null}[];
 sessions:{id:string;device_label:string;ip_address:string|null;last_seen_at:string;revoked_at:string|null}[];
};
export function decimalUnits(value:string,scale=18){const [whole='0',fraction='']=value.split('.');return BigInt(whole)*BigInt(10)**BigInt(scale)+BigInt(fraction.padEnd(scale,'0').slice(0,scale)||'0')}
export function unitsDecimal(value:bigint,scale=18){const base=BigInt(10)**BigInt(scale);const fraction=(value%base).toString().padStart(scale,'0').replace(/0+$/,'');return (value/base).toString()+(fraction?'.'+fraction:'')}
export function dashboardNumber(value:string|number|null|undefined,locale:Locale='fa',decimals=4){
 if(value===null||value===undefined)return '—';
 const [whole,fraction='']=String(value).split('.');if(!/^\d+$/.test(whole))return '—';
 const suffix=fraction.slice(0,decimals).replace(/0+$/,'');
 const digits=(s:string)=>locale==='en'?s:s.replace(/\d/g,d=>(locale==='ar'?'٠١٢٣٤٥٦٧٨٩':'۰۱۲۳۴۵۶۷۸۹')[Number(d)]);
 return new Intl.NumberFormat(locale).format(BigInt(whole))+(suffix?(locale==='en'?'.':'٫')+digits(suffix):'');
}
export function validIranianIban(iban:string){return /^IR\d{24}$/.test(iban)&&BigInt(iban.slice(4)+'1827'+iban.slice(2,4))%BigInt(97)===BigInt(1)}
