(()=>{
const defaultProfile={name:'مرکز توانبخشی مهر ماهور',license:'',physician:'',medicalNo:'',phone:'',postalCode:'',address:''};
db.clinicProfile={...defaultProfile,...(db.clinicProfile||{})};
document.head.insertAdjacentHTML('beforeend','<style>#insuranceReportModal{z-index:450}.insurance-setting{grid-column:1/-1}.insurance-setting .form-grid{margin-top:12px}.insurance-history{max-height:42vh;overflow:auto;margin:12px 0;border:1px solid var(--line);border-radius:10px}.insurance-history table{min-width:620px}.insurance-amount{width:150px;max-width:100%;padding:8px;border:1px solid var(--line);border-radius:8px;text-align:center;direction:ltr}.insurance-empty{padding:14px;color:var(--muted);text-align:center}</style>');
const settings=document.querySelector('#page-settings .settings');
if(settings)settings.insertAdjacentHTML('afterbegin',`<div class="setting insurance-setting"><h3>مشخصات سربرگ گزارش بیمه</h3><p>این اطلاعات روی برگه A5 خدمات درمانی درج می‌شود. برای اعتبار بیشتر، نام پزشک، شماره نظام پزشکی و مشخصات مرکز را کامل کنید.</p><div class="form-grid"><label class="field"><span>نام مرکز درمانی</span><input id="clinicName" placeholder="مرکز توانبخشی مهر ماهور"></label><label class="field"><span>شماره پروانه مرکز</span><input id="clinicLicense"></label><label class="field"><span>نام پزشک مسئول</span><input id="clinicPhysician"></label><label class="field"><span>شماره نظام پزشکی</span><input id="clinicMedicalNo"></label><label class="field"><span>تلفن مرکز</span><input id="clinicPhone"></label><label class="field"><span>کدپستی</span><input id="clinicPostalCode"></label><label class="field full"><span>نشانی مرکز</span><input id="clinicAddress"></label></div><div class="actions"><button id="saveClinicProfile" type="button" class="btn primary">ذخیره مشخصات سربرگ</button></div></div>`);
document.querySelector('#toast').insertAdjacentHTML('beforebegin',`<div id="insuranceReportModal" class="modal hidden"><div class="modal-card"><h3>خروجی A5 بیمه تکمیلی</h3><p id="insuranceReportPatient" style="color:var(--muted);font-size:12px"></p><label class="field"><span>کد ملی بیمار</span><input id="insuranceNationalId" inputmode="numeric" maxlength="10"></label><div class="notice">کل سوابق جلسات انجام‌شده بیمار در این بخش نمایش داده می‌شود. مبلغ بیمه را می‌توانید مستقل از مبلغ پرداختی واقعی تغییر دهید؛ این تغییر فقط در خروجی بیمه ذخیره و استفاده می‌شود و مبلغ اصلی جلسه را تغییر نمی‌دهد.</div><div id="insuranceHistory" class="insurance-history"></div><div class="actions"><button id="cancelInsuranceReport" type="button" class="btn secondary">انصراف</button><button id="printInsuranceReport" type="button" class="btn primary">ذخیره مبالغ و چاپ A5</button></div></div></div>`);
let reportPatientId=null;
const esc=(value='')=>String(value).replace(/[&<>"']/g,ch=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[ch]));
function fillProfile(){const c=db.clinicProfile||defaultProfile;$('#clinicName').value=c.name||'';$('#clinicLicense').value=c.license||'';$('#clinicPhysician').value=c.physician||'';$('#clinicMedicalNo').value=c.medicalNo||'';$('#clinicPhone').value=c.phone||'';$('#clinicPostalCode').value=c.postalCode||'';$('#clinicAddress').value=c.address||''}
function saveProfile(){if(role!=='manager')return;db.clinicProfile={name:$('#clinicName').value.trim()||defaultProfile.name,license:$('#clinicLicense').value.trim(),physician:$('#clinicPhysician').value.trim(),medicalNo:$('#clinicMedicalNo').value.trim(),phone:$('#clinicPhone').value.trim(),postalCode:$('#clinicPostalCode').value.trim(),address:$('#clinicAddress').value.trim()};save();toast('مشخصات سربرگ بیمه ذخیره شد.')}
function insuranceAmount(a){return a.insurancePayment===undefined||a.insurancePayment===null||a.insurancePayment===''?Math.max(0,Number(a.payment)||0):Math.max(0,Number(a.insurancePayment)||0)}
function renderInsuranceHistory(){const p=patient(reportPatientId),box=$('#insuranceHistory');if(!p||!box)return;const items=db.appointments.filter(a=>a.patientId===p.id&&a.status!=='لغو شده'&&(a.attendance||'pending')==='present').sort((a,b)=>(a.date+a.time).localeCompare(b.date+b.time));if(!items.length){box.innerHTML='<div class="insurance-empty">برای این بیمار هنوز جلسه انجام‌شده‌ای ثبت نشده است.</div>';return}const total=items.reduce((sum,a)=>sum+insuranceAmount(a),0);box.innerHTML=table(['تاریخ حضور','کار / خدمت انجام‌شده','هزینه جلسه'],items.map(a=>[faDigits(new Date(a.date+'T12:00:00').toLocaleDateString('fa-IR')),esc(treatmentSummary(a)||appointmentLabel(a)),`${fa(insuranceAmount(a))} تومان`]))+`<div class="total" style="margin:8px"><span>جمع کل مبلغ:</span><span>${fa(total)} تومان</span></div>`}
function saveInsuranceAmounts(){return}
window.openInsuranceReport=id=>{const p=patient(id);if(!p)return;reportPatientId=id;$('#insuranceReportPatient').textContent=`بیمار: ${p.name} — پرونده: ${p.fileNo||'ثبت نشده'}`;$('#insuranceNationalId').value=p.nationalId||p.fileNo||'';renderInsuranceHistory();$('#insuranceReportModal').classList.remove('hidden')};
function closeReport(){reportPatientId=null;$('#insuranceReportModal').classList.add('hidden')}
function printReport(){const p=patient(reportPatientId);if(!p)return closeReport();saveInsuranceAmounts();const nationalId=latinDigits($('#insuranceNationalId').value).replaceAll('/','');if(nationalId&&!/^\d{10}$/.test(nationalId))return toast('کد ملی باید ۱۰ رقم باشد.');const items=db.appointments.filter(a=>a.patientId===p.id&&a.status!=='لغو شده'&&(a.attendance||'pending')==='present').sort((a,b)=>(a.date+a.time).localeCompare(b.date+b.time));if(!items.length)return toast('برای این بیمار هنوز جلسه انجام‌شده‌ای ثبت نشده است.');p.nationalId=nationalId;save();const c=db.clinicProfile||defaultProfile,total=items.reduce((sum,a)=>sum+insuranceAmount(a),0),reportNo=`MM-${p.fileNo||p.id}-${localDate().replaceAll('-','')}`,logoUrl=new URL('logo.jpg',location.href).href,visitItems=items.filter(a=>a.visitType==='initial'),treatmentItems=items.filter(a=>a.visitType!=='initial'),visitRows=visitItems.map((a,i)=>`<tr><td>${fa(i+1)}</td><td>${faDigits(new Date(a.date+'T12:00:00').toLocaleDateString('fa-IR'))}</td><td>${esc(appointmentLabel(a))}</td><td>${esc(treatmentSummary(a))}</td><td>${fa(insuranceAmount(a))}</td></tr>`).join(''),treatmentRows=treatmentItems.map(a=>`<tr><td>${faDigits(new Date(a.date+'T12:00:00').toLocaleDateString('fa-IR'))}</td><td>${fa(insuranceAmount(a))}</td></tr>`).join(''),generalTreatment=[...new Set(treatmentItems.map(a=>treatmentSummary(a)).filter(x=>x&&x!=='—'))].join('؛ ')||p.treatment||'—';
const html=`<!doctype html><html lang="fa" dir="rtl"><head><meta charset="utf-8"><title>گزارش بیمه ${esc(p.name)}</title><style>@page{size:A5 portrait;margin:8mm}*{box-sizing:border-box}body{margin:0;font-family:Tahoma,Arial,sans-serif;color:#16243a;font-size:9.5px;line-height:1.65}.sheet{width:100%;min-height:194mm;border:1px solid #aab7c8;padding:7mm}.head{display:grid;grid-template-columns:48px 1fr 125px;gap:8px;align-items:center;border-bottom:2px solid #163d6b;padding-bottom:7px}.head img{width:44px;height:44px;object-fit:cover;border-radius:8px}.head h1{font-size:15px;margin:0;color:#163d6b}.head p{margin:2px 0;color:#516176}.doc{text-align:left;font-size:8.5px}.title{text-align:center;font-size:13px;font-weight:bold;margin:10px 0 7px}.info{display:grid;grid-template-columns:1fr 1fr;gap:5px 12px;border:1px solid #cbd5e1;background:#f8fafc;padding:7px;margin-bottom:8px}.info b{color:#163d6b}table{width:100%;border-collapse:collapse;table-layout:fixed}thead{display:table-header-group}tr{break-inside:avoid}th,td{border:1px solid #9eacbd;padding:4px 3px;text-align:center;vertical-align:middle}th{background:#eaf1f8;color:#163d6b}.visit-table th:nth-child(1){width:7%}.visit-table th:nth-child(2){width:17%}.visit-table th:nth-child(3){width:14%}.visit-table th:nth-child(5){width:20%}.visit-table td:nth-child(4){text-align:right}.treatment-summary{border:1px solid #9eacbd;border-bottom:0;background:#f8fafc;padding:6px 7px;text-align:right}.treatment-summary b{color:#163d6b}.session-table th,.session-table td{width:50%}.total{display:flex;justify-content:space-between;border:1px solid #163d6b;background:#eef5fb;padding:6px 8px;margin-top:7px;font-size:11px;font-weight:bold;break-inside:avoid}.cert{margin-top:8px;text-align:justify}.signs{display:grid;grid-template-columns:1fr 1fr;gap:25px;margin-top:14px;text-align:center;break-inside:avoid}.sign{height:30mm;border-top:1px dashed #94a3b8;padding-top:5px}.foot{border-top:1px solid #cbd5e1;padding-top:4px;color:#64748b;font-size:8px;text-align:center;break-inside:avoid}</style></head><body><div class="sheet"><div class="head"><img src="${esc(logoUrl)}"><div><h1>${esc(c.name)}</h1><p>${c.license?`شماره پروانه مرکز: ${esc(c.license)}`:'مرکز ارائه خدمات درمانی و توانبخشی'}</p></div><div class="doc">شماره گزارش: ${esc(reportNo)}<br>تاریخ صدور: ${jalaliToday()}</div></div><div class="title">گواهی و صورتحساب خدمات درمانی بیمار</div><div class="info"><div><b>نام بیمار:</b> ${esc(p.name)}</div><div><b>کد ملی:</b> ${esc(nationalId||'—')}</div></div><table class="visit-table"><thead><tr><th>ردیف</th><th>تاریخ حضور</th><th>کار / خدمت انجام‌شده</th><th>هزینه جلسه (تومان)</th></tr></thead><tbody>${items.map((a,i)=>`<tr><td>${fa(i+1)}</td><td>${faDigits(new Date(a.date+'T12:00:00').toLocaleDateString('fa-IR'))}</td><td>${esc(treatmentSummary(a)||appointmentLabel(a))}</td><td>${fa(insuranceAmount(a))}</td></tr>`).join('')}</tbody></table><div class="total"><span>تعداد جلسات انجام‌شده: ${fa(items.length)}</span><span>جمع کل مبلغ: ${fa(total)} تومان</span></div><p class="cert">گواهی می‌شود بیمار فوق در تاریخ‌های درج‌شده به این مرکز مراجعه کرده و خدمات درمانی مندرج در جدول را دریافت نموده است. این برگه براساس سوابق ثبت‌شده مرکز صادر شده و اعتبار آن منوط به مهر مرکز و امضای مسئول فنی یا پزشک معالج است.</p><div class="signs"><div class="sign">مهر و امضای مرکز درمانی</div><div class="sign">نام و امضای پزشک مسئول<br>${esc(c.physician||'')}${c.medicalNo?` — نظام پزشکی: ${esc(c.medicalNo)}`:''}</div></div><div class="foot">${esc(c.address||'نشانی مرکز ثبت نشده است')}${c.phone?` | تلفن: ${esc(c.phone)}`:''}${c.postalCode?` | کدپستی: ${esc(c.postalCode)}`:''}</div></div></body></html>`;
const frame=document.createElement('iframe');frame.style.cssText='position:fixed;width:0;height:0;border:0;right:-9999px';document.body.appendChild(frame);frame.contentDocument.open();frame.contentDocument.write(html);frame.contentDocument.close();closeReport();setTimeout(()=>{frame.contentWindow.focus();frame.contentWindow.print();setTimeout(()=>frame.remove(),60000)},500)}
const baseRenderPatients=renderPatients;renderPatients=function(){baseRenderPatients();const q=$('#patientSearch').value.trim(),rows=db.patients.filter(p=>!p.archived&&(p.name+p.phone+(p.emergencyPhone||'')+p.fileNo).includes(q));$$('#patientsTable tbody tr').forEach((tr,i)=>{if(rows[i]&&tr.lastElementChild&&!tr.querySelector('.insurance-a5-btn'))tr.lastElementChild.insertAdjacentHTML('afterbegin',`<button class="btn secondary insurance-a5-btn" onclick="openInsuranceReport(${rows[i].id})">خروجی بیمه A5</button> `)})};
$('#patientSearch').oninput=renderPatients;
const baseRenderSettings=renderSettings;renderSettings=function(){baseRenderSettings();fillProfile()};
$('#saveClinicProfile').onclick=saveProfile;$('#cancelInsuranceReport').onclick=closeReport;$('#printInsuranceReport').onclick=printReport;
renderAll();
})();
