import type {VerificationMetadata} from './identity-presentation';
export type VerificationType='identity'|'identity_bank';
export type ReviewStage='information'|'documents'|'inquiries'|'final';
export type VerificationLevel='basic'|'primary'|'full';
export const verificationTypes={identity:'هویتی · سطح اولیه',identity_bank:'هویتی و بانکی · سطح کامل'};
export const reviewStages={information:'بررسی اطلاعات',documents:'بررسی مدارک',inquiries:'بررسی استعلام‌ها',final:'تأیید نهایی'};
export const verificationLevels={basic:'پایه',primary:'اولیه',full:'کامل هویتی و بانکی'};
export const targetLevel=(type:VerificationType):VerificationLevel=>type==='identity_bank'?'full':'primary';
export type IdentityRequest=VerificationMetadata&{temporary_approved_at?:string|null;temporary_reason?:string|null;final_approved_level?:'primary'|'full'|null;final_decided_at?:string|null;final_review_note?:string|null;verification_type?:VerificationType;review_stage?:ReviewStage;verification_level?:VerificationLevel;id:string;status:'draft'|'pending'|'documents_approved'|'verified'|'rejected'|'superseded';phone:string;first_name:string|null;last_name:string|null;national_id:string|null;birth_certificate_number:string|null;father_name:string|null;address:string|null;postal_code:string|null;challenge:string;challenge_expires_at:string;card_path:string|null;card_uploaded?:boolean;selfie_uploaded?:boolean;selfie_path:string|null;version:number;review_note:string|null;submitted_at:string|null;verified_at:string|null;created_at:string};
export type IdentityCheck={id:string;kind:'identity'|'mobile_owner'|'bank_owner';status:'not_connected'|'pending'|'passed'|'failed'|'error';checked_at:string|null;bank_id:string|null};
export type IdentityState={request:IdentityRequest|null;checks:IdentityCheck[]};
export const identityStatuses={draft:'پیش‌نویس',pending:'در انتظار بررسی مدیر',documents_approved:'مدارک تأییدشده · در انتظار تأیید نهایی',verified:'هویت تأییدشده',rejected:'نیاز به اصلاح مدارک',superseded:'نیاز به ثبت درخواست جدید'};
export const inquiryKinds={identity:'تطبیق کد ملی و مشخصات',mobile_owner:'مالکیت موبایل',bank_owner:'مالکیت حساب بانکی'};
export const inquiryStatuses={not_connected:'در انتظار اتصال سرویس',pending:'در انتظار پاسخ',passed:'تطبیق تأیید شد',failed:'عدم تطبیق',error:'خطای استعلام'};
export const identityUuid=(v:unknown):v is string=>typeof v==='string'&&/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v);
const digits=(v:unknown)=>typeof v==='string'?v.trim().replace(/[۰-۹]/g,d=>String('۰۱۲۳۴۵۶۷۸۹'.indexOf(d))).replace(/[٠-٩]/g,d=>String('٠١٢٣٤٥٦٧٨٩'.indexOf(d))):'';
export function nationalIdValid(v:string){if(!/^\d{10}$/.test(v)||/^(\d)\1{9}$/.test(v))return false;const sum=[...v.slice(0,9)].reduce((s,d,i)=>s+Number(d)*(10-i),0)%11;return Number(v[9])===(sum<2?sum:11-sum)}
export function identityFields(input:Record<string,unknown>){
 const f={first_name:String(input.first_name||'').trim(),last_name:String(input.last_name||'').trim(),national_id:digits(input.national_id),birth_certificate_number:digits(input.birth_certificate_number),father_name:String(input.father_name||'').trim(),address:String(input.address||'').trim(),postal_code:digits(input.postal_code)};
 if(!nationalIdValid(f.national_id))throw new Error('کد ملی ده‌رقمی معتبر وارد کنید.');
 if(!/^\d{1,10}$/.test(f.birth_certificate_number))throw new Error('شماره شناسنامه معتبر وارد کنید.');
 if(!/^\d{10}$/.test(f.postal_code))throw new Error('کد پستی باید ده رقم باشد.');
 if([f.first_name,f.last_name,f.father_name].some(x=>x.length<2||x.length>80||/[\x00-\x1f]/.test(x)))throw new Error('نام، نام خانوادگی و نام پدر را کامل وارد کنید.');
 if(f.address.length<15||f.address.length>1000)throw new Error('نشانی کامل شامل شهر، خیابان، پلاک و واحد را وارد کنید.');
 return f;
}
export const IDENTITY_BUCKET='identity-documents',MAX_IDENTITY_PHOTO=5*1024*1024;
export function identityError(code:string){return ({national_id_locked:'کد ملی با حساب بانکی تطبیق‌شده متفاوت است. برای اصلاح با پشتیبانی تماس بگیرید.',verified_mobile_required:'ابتدا شماره موبایل حساب را با کد پیامکی تأیید کنید.',identity_conflict:'درخواست تغییر کرده است؛ اطلاعات را تازه‌سازی کنید.',challenge_expired:'مهلت کد عکس تمام شده است؛ درخواست جدید بسازید.',challenge_or_consent_required:'مهلت کد تمام شده یا تأیید صحت اطلاعات ثبت نشده است.',identity_photos_required:'هر دو عکس کارت ملی و عکس همراه کد را بارگذاری کنید.',identity_rate_limit:'تعداد درخواست‌های امروز به حد مجاز رسیده است.',upload_limit:'تعداد تلاش‌های بارگذاری این درخواست به حد مجاز رسیده است.',invalid_identity_fields:'اطلاعات هویتی را کامل و صحیح وارد کنید.',review_checks_required:'هر سه مورد بررسی مدارک را تأیید کنید.',rejection_reason_required:'دلیل رد مدارک را وارد کنید.',phone_changed:'موبایل حساب تغییر کرده است؛ درخواست جدید لازم است.',settings_conflict:'تنظیمات تغییر کرده است؛ صفحه را تازه‌سازی کنید.',vault_unavailable:'ذخیره امن کلید هنوز آماده نیست.',invalid_api_key:'کلید سرویس معتبر نیست.'} as Record<string,string>)[code]||'ذخیره یا دریافت اطلاعات انجام نشد. دوباره تلاش کنید.'}
