class MemoViewModel: ObservableObject {
    // 1. 상태 (State) - View는 이것만 바라봅니다.
    @Published private(set) var state = MemoState()
    
    private var cancellables = Set<AnyCancellable>()
    private let useCase: FetchMemoUseCase // 클린 아키텍처 결합

    // 2. 의도 처리 (Intent)
    func send(intent: MemoIntent) {
        switch intent {
        case .fetchMemos:
            handleFetchMemos()
        case .deleteMemo(let id):
            handleDeleteMemo(id: id)
        case .addMemo(let content):
            // 로직 처리...
            break
        }
    }

    private func handleFetchMemos() {
        // 로딩 상태로 변경 (새로운 상태 생성)
        state.isLoading = true 
        
        useCase.execute()
            .sink(receiveCompletion: { _ in 
                self.state.isLoading = false 
            }, receiveValue: { memos in
                // 데이터를 받아 새로운 상태로 업데이트
                self.state.memos = memos
            })
            .store(in: &cancellables)
    }
}