import {latinDigits} from './auth-input';
import {validIranianIban} from './dashboard';
import {identityUuid} from './identity';
import {bankFromIban} from './iranian-banks';
export function ibanInputDigits(value:string){
 return latinDigits(value).replace(/[\s-]/g,'').replace(/^IR/i,'');
}
export function validBankCard(value:string){
 if(!/^\d{16}$/.test(value)||/^(\d)\1{15}$/.test(value))return false;
 return [...value].reduce((sum,d,i)=>{const n=Number(d)*(i%2?1:2);return sum+(n>9?n-9:n)},0)%10===0;
}
export function bankRegistrationInput(p:Record<string,unknown>){
 const iban='IR'+ibanInputDigits(String(p.iban||''));
 const card=latinDigits(String(p.card_number||'')).replace(/[\s-]/g,'');
 if(!validIranianIban(iban))throw new Error('شماره شبای معتبر وارد کنید.');
 const bankName=bankFromIban(iban)?.name;
 if(!bankName)throw new Error('بانک این شماره شبا شناسایی نشد. شماره شبا را بررسی کنید.');
 if(p.account_title!==undefined&&typeof p.account_title!=='string')throw new Error('عنوان حساب معتبر نیست.');
 const title=typeof p.account_title==='string'?p.account_title.trim():'';
 if(title.length>80||/[\u0000-\u001f\u007f]/.test(title))throw new Error('عنوان حساب باید یک خط و حداکثر ۸۰ نویسه باشد.');
 if(card&&!validBankCard(card))throw new Error('شماره کارت باید ۱۶ رقم و معتبر باشد.');
 if(!identityUuid(p.request_key))throw new Error('فرم را ببندید و دوباره باز کنید.');
 if(p.consent!==true)throw new Error('اجازه بررسی مالکیت حساب را تأیید کنید.');
 return {p_iban:iban,p_bank_name:bankName,p_account_title:title,p_card_number:card,p_request_key:p.request_key,p_consent:true};
}
export const bankErrors:Record<string,string>={
 bank_registration_unavailable:'ثبت حساب بانکی هنوز فعال نشده است. فعال‌سازی این بخش باید توسط مدیر انجام شود. اطلاعات حساب شما ثبت نشده است.',
 card_adapter_not_ready:'کلید سرویس تبدیل کارت هنوز ثبت نشده است. فعلاً می‌توانید شماره کارت را خالی بگذارید و فقط شبا را ثبت کنید.',
 card_iban_not_matched:'شماره کارت و شبا مربوط به یک حساب نیستند. حساب ثبت نشد.',
 card_provider_unavailable:'تطبیق کارت با شبا انجام نشد. حساب ثبت نشد؛ کمی بعد دوباره تلاش کنید.',
 bank_not_matched:'شماره شبا با کد ملی ثبت‌شده در پروفایل مطابقت ندارد. حساب بانکی ثبت نشد.',
 national_id_required:'ابتدا کد ملی خود را در مشخصات کاربری ثبت کنید.',
 invalid_national_id:'کد ملی ده‌رقمی معتبر وارد کنید.',
 national_id_locked:'کد ملی در درخواست احراز هویت یا حساب تطبیق‌شده استفاده شده است. برای اصلاح آن با پشتیبانی تماس بگیرید.',
 verified_mobile_required:'ابتدا شماره موبایل حساب را با کد پیامکی تأیید کنید.',
 bank_consent_required:'اجازه بررسی مالکیت حساب را تأیید کنید.',
 invalid_bank_input:'اطلاعات حساب بانکی معتبر نیست.',
 bank_verification_required:'حساب باید از فرم بررسی مالکیت ثبت شود.',
 bank_limit:'حداکثر ۱۰ حساب بانکی می‌توانید ثبت کنید.',
 bank_request_conflict:'اطلاعات فرم تغییر کرده است. فرم را ببندید و دوباره باز کنید.',
 bank_request_expired:'این حساب حذف شده است. برای ثبت دوباره فرم جدید باز کنید.',
 bank_already_registered:'این شبا قبلاً ثبت شده است. برای تغییر کارت حساب با پشتیبانی تماس بگیرید.',
 adapter_not_ready:'سرویس بررسی مالکیت حساب هنوز آماده نیست. حساب بانکی ثبت نشد.',
 inquiry_busy:'یک بررسی دیگر در حال انجام است. کمی بعد دوباره تلاش کنید.',
 inquiry_retry_later:'برای بررسی دوباره، یک دقیقه صبر کنید.',
 inquiry_daily_limit:'تعداد بررسی‌های امروز به حد مجاز رسیده است. فردا دوباره تلاش کنید.',
};
export function bankError(code:string){return bankErrors[code]||'سرویس بانکی پاسخ قابل تأییدی نداد. حساب ثبت نشد؛ کمی بعد دوباره تلاش کنید.'}
