# ClinicDetailPage — پنج اصلاح

در `assets/admin/pages/ClinicDetailPage.tsx` پنج مشکل وجود دارد که باید همه را درست کنی:

---

## ۱. شهر اشتباه نمایش داده می‌شود

در خطوط حدود ۶۳۲–۶۳۳، `cityName` و `provinceName` از `clinic.city[0]` و `clinic.state[0]`
(روی Clinic entity) خوانده می‌شوند. منبع درست، `clinicAddresses[0].city` و
`clinicAddresses[0].province` است (جدول `doctor_addresses`).

- ترجیحاً از `clinicAddresses[0]` بخواند و اگر خالی بود fallback به Clinic entity داشته باشد
- `InfoTile` آدرس هم باید از `clinicAddresses[0].address` بخواند نه `clinic.location`

---

## ۲. هر کلینیک فقط یک آدرس

**فرانت‌اند**: دکمه «افزودن آدرس» وقتی `clinicAddresses.length >= 1` است مخفی شود؛
فقط دکمه «ویرایش» نمایش داده شود.

**بک‌اند** (`src/Clinic/Controller/ClinicController.php`، متد `createAddress`):
قبل از ساخت آدرس جدید بررسی کند آیا این کلینیک قبلاً آدرس دارد. اگر داشت 409 برگرداند.
همچنین محدودیت حذف (`remaining <= 1`) را بردار — دیگر نیازی نیست چون کاربر می‌تواند ویرایش کند.

---

## ۳. مودال آدرس — استان، شهر و نقشه

فرم افزودن/ویرایش آدرس (مودال `addrFormOpen`) باید استان، شهر و نقشه داشته باشد:

- `addrForm` state باید `province_id`, `city_id`, `latitude`, `longitude` هم داشته باشد
- هنگام باز کردن مودال برای ویرایش، مقادیر `addr.province`, `addr.city`, `addr.map` لود شوند
- در مودال، ابتدا استان انتخاب می‌شود، سپس شهرهای آن استان لود می‌شوند
- **وقتی شهر انتخاب می‌شود**: با `geocodeCity` (همان تابعی که در EditModal قبلاً بود)좌표 شهر گرفته شود و نقشه با `flyTo` روی آن زوم کند — دقیقاً همان رفتار تب location قبلی
- زیر dropdown شهر، `MapPicker` نمایش داده شود تا کاربر بتواند موقعیت دقیق را روی نقشه انتخاب کند
- در `saveAddrMutation` مقادیر `province_id`, `city_id`, `latitude`, `longitude` به payload اضافه شوند
- بک‌اند (`hydrateClinicAddress`) قبلاً همه این فیلدها را handle می‌کند — نیازی به تغییر ندارد

---

## ۴. لوگو آپلود نمی‌شود

در `handleLogoUpload` و `handleGalleryUpload` توکن اینطور خوانده می‌شود:

```typescript
JSON.parse(localStorage.getItem('clinicpro-auth') ?? '{}')?.state?.token ?? ''
```

این روش ممکن است fail کند. باید از `useAuthStore` استفاده شود:

```typescript
const token = useAuthStore(s => s.token);
```

و در fetch header از این `token` استفاده شود.

---

## ۵. گالری فقط یک تصویر می‌گیرد

`<input ref={galleryInputRef} type="file" accept="image/*">` بدون `multiple` است.

- `multiple` به input اضافه شود
- `handleGalleryUpload` تغییر کند تا روی همه فایل‌های انتخاب‌شده (`e.target.files`) loop بزند
  و همه را یکی‌یکی آپلود کند
