# P2.1 iOS Batch A - Pure Delegation Methods

**Purpose:** First batch of iOS plugin refactoring - pure delegation methods (no validation, no orchestration)  
**Owner:** Development Team  
**Created:** 2025-12-23  
**Status:** ready  
**Baseline:** See `docs/progress/00-STATUS.md` (v1.0.11-p3-complete)

---

## Goal

Refactor iOS plugin methods that are **pure delegation** - methods that can directly call service methods without input validation or result transformation.

**Success Criteria:**
- Plugin method becomes thin wrapper around service call
- No business logic remains in plugin
- External API unchanged
- Tests pass

---

## Target Methods (Batch A)

### 1. `cancelAllNotifications()`
- **Current:** Direct call to `UNUserNotificationCenter.current().removeAllPendingNotificationRequests()`
- **Target Service:** `UNUserNotificationCenter` (already direct)
- **Change:** Keep as-is (already thin) OR wrap in service if we create a notification manager
- **Type:** pure
- **Lines:** ~10 lines

### 2. `getLastNotification()`
- **Current:** Delegates to `storage?.getLastNotification()`
- **Target Service:** `DailyNotificationStorage`
- **Change:** Ensure proper error handling, delegate directly
- **Type:** pure
- **Lines:** ~15 lines

### 3. `getScheduledReminders()`
- **Current:** Delegates to `storage?.getReminders()`
- **Target Service:** `DailyNotificationStorage`
- **Change:** Ensure proper error handling, delegate directly
- **Type:** pure
- **Lines:** ~15 lines

### 4. `getBackgroundTaskStatus()`
- **Current:** May have logic in plugin
- **Target Service:** `DailyNotificationBackgroundTaskManager`
- **Change:** Delegate to `backgroundTaskManager.getStatus()`
- **Type:** pure
- **Lines:** ~20 lines

### 5. `checkForMissedBGTask()`
- **Current:** May have logic in plugin
- **Target Service:** `DailyNotificationBackgroundTaskManager`
- **Change:** Delegate to `backgroundTaskManager.checkMissed()`
- **Type:** pure
- **Lines:** ~20 lines

### 6. `getNextScheduledNotificationTime()`
- **Current:** May delegate to scheduler
- **Target Service:** `DailyNotificationScheduler`
- **Change:** Delegate to `scheduler?.getNextTime()`
- **Type:** pure
- **Lines:** ~20 lines

### 7. `getDualScheduleStatus()`
- **Current:** May combine multiple sources
- **Target Service:** `DailyNotificationScheduler`
- **Change:** Delegate to `scheduler?.getDualStatus()`
- **Type:** pure (if service method exists) or glue (if needs combination)
- **Lines:** ~30 lines

---

## Implementation Strategy

1. **Read current implementation** of each method
2. **Identify service method** to delegate to (or create if needed)
3. **Refactor plugin method** to thin wrapper
4. **Test** that external API behavior is unchanged
5. **Commit** in small batches (1-2 methods per commit)

---

## Service Initialization

Ensure services are initialized in `load()`:
- `storage: DailyNotificationStorage?` ✅ (already exists)
- `scheduler: DailyNotificationScheduler?` ✅ (already exists)
- `backgroundTaskManager: DailyNotificationBackgroundTaskManager?` (may need to add)
- `reactivationManager: DailyNotificationReactivationManager?` ✅ (already exists)
- `stateActor: DailyNotificationStateActor?` ✅ (already exists)

---

## Notes

- iOS uses `@objc func` for plugin methods (not `@PluginMethod` like Android)
- Methods are registered in `pluginMethods` array
- Error handling uses `call.reject()` and `call.resolve()`
- Services are optional (`var storage: DailyNotificationStorage?`), so need nil checks

---

## Estimated Impact

- **Methods refactored:** 7
- **Lines removed:** ~130-150 lines
- **Complexity reduction:** Low (pure delegation)
- **Risk:** Low (no business logic changes)

---

## Next Batch

After Batch A, proceed to **Batch B** (validation + delegation methods) and **Batch C** (glue/orchestration methods).

