// // ActionExecutor.swift // Poche // // Author: Simon-Pierre Boucher // Contact: contact@spboucher.ai // import Foundation /// Performs confirmed side effects against the bridges. Constraint: only /// ConfirmCenter may call this type — tools and views never touch bridges /// or the store's write API directly (CLAUDE.md §3, §10). @MainActor struct ActionExecutor { let bridge: EventKitBridge let store: PocheStore /// Returns a short, truthful past-tense summary — safe to show because /// by the time it exists, the write has actually happened. func execute(_ payload: PendingAction.Payload) async throws -> String { switch payload { case .reminder(let draft): try await bridge.createReminder(draft) return "Rappel « \(draft.title) » créé pour \(DateResolver.display(draft.due))" case .event(let draft): try await bridge.createEvent(draft) return "Événement « \(draft.title) » créé le \(DateResolver.display(draft.start))" case .note(let draft): store.addNote(title: draft.title, content: draft.content) return "Note « \(draft.title) » enregistrée" case .newTask(let draft): store.addTask(title: draft.title, details: draft.details, due: draft.due) return "Tâche « \(draft.title) » créée" case .taskUpdate(let draft): try store.updateTask( uuid: draft.taskID, newTitle: draft.newTitle, newDue: draft.newDue, markDone: draft.markDone ) return "Tâche « \(draft.newTitle ?? draft.currentTitle) » mise à jour" } } }