# Phase 11: Data Seeder

## Objective
Create a comprehensive sandbox dataset with photos for testing all Hotel Manager (PMS) functionality.

---

## Tasks

### 11.1 HotelSeeder

**File:** `database/seeders/HotelSeeder.php`

Creates for each seeded Place (that has hotels enabled):

#### Hotels (2 per place)
1. **"Champion Resort & Spa"** — 5-star luxury resort
   - check_in: 15:00, check_out: 11:00
   - 6 room types, 50 rooms
   - Full extras menu
   - Channel mappings (Booking.com + Airbnb)

2. **"Champion City Hotel"** — 3-star business hotel
   - check_in: 14:00, check_out: 12:00
   - 4 room types, 30 rooms
   - Basic extras
   - Channel mapping (Booking.com)

#### Room Types (per hotel)

**Resort:**
| Name | Bed | Max Occ | Base Price | Member Price |
|---|---|---|---|---|
| Standard Room | DOUBLE | 2 | 150 EUR | 120 EUR |
| Superior Room | QUEEN | 2 | 220 EUR | 180 EUR |
| Deluxe Room | KING | 3 | 320 EUR | 260 EUR |
| Junior Suite | KING | 3 | 450 EUR | 380 EUR |
| Executive Suite | KING | 4 | 650 EUR | 550 EUR |
| Presidential Suite | KING | 4 | 1200 EUR | 1000 EUR |

**City Hotel:**
| Name | Bed | Max Occ | Base Price | Member Price |
|---|---|---|---|---|
| Single Room | SINGLE | 1 | 80 EUR | 65 EUR |
| Double Room | DOUBLE | 2 | 110 EUR | 90 EUR |
| Twin Room | TWIN | 2 | 110 EUR | 90 EUR |
| Family Room | QUEEN | 4 | 160 EUR | 130 EUR |

#### Rooms
- Distributed across floors (1-5 for resort, 1-3 for city)
- Room numbers: floor × 100 + sequential (101, 102, 201, 202...)
- 90% AVAILABLE, 5% OCCUPIED, 5% MAINTENANCE
- Housekeeping: 80% CLEAN, 10% DIRTY, 5% IN_PROGRESS, 5% INSPECTED

#### Seasonal Rates
| Season | Period | Multiplier |
|---|---|---|
| LOW | Jan 15 — Mar 15 | 0.8× |
| MID | Mar 16 — Jun 14, Sep 16 — Nov 30 | 1.0× |
| HIGH | Jun 15 — Sep 15 | 1.3× |
| SPECIAL | Dec 20 — Jan 14 | 1.5× |

#### Extras
| Extra | Type | Price |
|---|---|---|
| Room Service Breakfast | ROOM_SERVICE | 25 EUR |
| Minibar Package | MINIBAR | 35 EUR |
| Spa Day Pass | SPA | 80 EUR |
| Laundry Express | LAUNDRY | 20 EUR |
| Airport Transfer | TRANSFER | 60 EUR |
| Parking (per day) | PARKING | 15 EUR |

#### Reservations (sample data)
- 10 upcoming reservations per hotel (various statuses: PENDING, CONFIRMED)
- 5 currently checked-in reservations
- 20 past reservations (CHECKED_OUT)
- 3 cancelled, 2 no-shows
- Some with prepayment, some pay-at-checkout
- Some with extras charged

#### Housekeeping Logs
- Sample logs for the last 7 days
- Mix of automated (checkout) and manual transitions

### 11.2 Register Seeder

**File:** `database/seeders/DatabaseSeeder.php`

Add `HotelSeeder::class` to the seeder list.

### 11.3 Tests

- [ ] Seeder runs without errors
- [ ] All created records pass model validation
- [ ] Relationships are correctly linked
- [ ] Seasonal rates don't overlap
- [ ] Room numbers are unique per hotel

---

## Files Created/Modified

| Action | File |
|---|---|
| Create | `database/seeders/HotelSeeder.php` |
| Modify | `database/seeders/DatabaseSeeder.php` |

---

## Acceptance Criteria

- [ ] Seeder creates complete dataset without errors
- [ ] Hotels have correct room types, rooms, rates, extras
- [ ] Sample reservations cover all statuses
- [ ] Seasonal rates cover the full year
- [ ] Data is realistic and useful for testing
- [ ] Seeder is idempotent (can run multiple times)
