# Holiday Hours Conflict Resolution Plan
## Overview
Add a conflict resolution flow to the "Create Exception Schedule" modal (similar to the Time Blocker flow) that prevents saving holiday hours until all affected client bookings have been moved out of the newly-closed/rescheduled time periods.
---
## Key Differences from Time Blocker Flow
| Aspect | Time Blockers | Holiday Hours |
|---|---|---|
| Scope | Single day, specific time range | Entire weeks, full daily schedules |
| Available-for-reschedule logic | Same working hours apply (no change) | **Dual mode**: For same-week affected days → use **new holiday hours**; for other weeks → use **default hours** |
| Bypass mechanism | N/A (blocker is hard block) | `out_of_hours` flag on admin booking create/reserve |
| Existing conflict check | Client-side overlap against one date | Need per-week overlap against up to N weeks |
| Placeholder blocker pattern | `RESERVATION:placeholder:{bookingId}` | New pattern needed (likely holiday-specific placeholder) |
---
## Files to Modify
### Frontend
1. **`frontend/src/lib/components/admin/HolidayHours.svelte`** — Add conflict detection UI
2. **`frontend/src/routes/admin/+page.svelte`** — Wire `openUserModal`, `openBookingModal`, `rescheduleVersion` props to `HolidayHours`
### Backend
3. **`backend/handlers/scheduling/exceptional-hours.go`** — Add conflict-checking API or expand existing
4. **`backend/handlers/scheduling/default-hours.go`** — Add "preview" mode to GetAvailableHours that accepts proposed exceptional hours for conflict-specific available-slot preview
5. **`backend/main.go`** — Register new route(s)
---
## Frontend Design
### A. Props Interface (HolidayHours.svelte)
```typescript
interface Props {
openUserModal?: (userId: string) => void;
openBookingModal?: (bookingId: string) => void;
rescheduleVersion?: number;
}
```
Wire these from `admin/+page.svelte`:
```svelte
```
### B. New State Variables
```typescript
let overlappingBookings = $state([]);
let checkingOverlap = $state(false);
let hasOverlap = $state(false);
let conflictWeeks = $state