Mỗi bản nháp nội dung (Content Draft) sẽ trải qua các trạng thái trong hệ thống:

1. **draft:** Nội dung vừa được AI Agent tạo ra (`create_content`).
2. **pending_review:** Đã được submit và đang chờ bộ phận Marketing kiểm duyệt (`submit_for_review`). Kích hoạt thông báo `CONTENT_SUBMITTED`.
3. **approved:** Đã duyệt thành công (`approve_content`). Tự động được thêm vào hàng đợi đăng bài (Queue) và kích hoạt thông báo `CONTENT_APPROVED`.
4. **rejected:** Từ chối nội dung hoàn toàn. Lý do từ chối bắt buộc phải có (`reject_content`). Lý do này được ghi nhận lại vào Learning Loop (thông qua `save_feedback`) để AI học hỏi. Kích hoạt thông báo `CONTENT_REJECTED`.
5. **changes_requested:** Yêu cầu chỉnh sửa lại mà không từ chối hoàn toàn (`request_changes`).
6. **scheduled:** Nội dung đã duyệt được xếp lịch cụ thể để đăng bài (`schedule_content`).
7. **published:** Đã đăng bài thành công lên các nền tảng mạng xã hội (`mark_published`).
8. **failed:** Quá trình đăng bài thất bại, có thể retry từ trạng thái scheduled (`mark_failed`).
9. **cancelled:** Đã huỷ bỏ lịch đăng.

**Sơ đồ luồng trạng thái (State Machine):**
- `draft` → `pending_review`
- `pending_review` → `approved`, `rejected`, `changes_requested`
- `changes_requested` → `pending_review`, `draft`
- `rejected` → `draft`
- `approved` → `scheduled`, `draft`
- `scheduled` → `published`, `cancelled`, `failed`
- `failed` → `scheduled` (retry)

### Sequence Diagram Quy trình Kiểm duyệt

```mermaid
sequenceDiagram
    participant AI as AI Stylist Agent
    participant Route as API Route (/api/content)
    participant Gate as Approval Gate
    participant Mkt as Marketing Team
    participant Learn as Learning Loop (Feedback)
    participant Publisher as Social Publisher

    AI->>Route: POST /
    Route->>Gate: create_content(status: draft)
    AI->>Route: POST /{id}/submit (or auto_submit=True)
    Route->>Gate: submit_for_review()
    Gate-->>Mkt: Notify: CONTENT_SUBMITTED
    
    alt Approval
        Mkt->>Route: POST /{id}/approve
        Route->>Gate: approve_content()
        Gate-->>Mkt: Notify: CONTENT_APPROVED
        Route->>Publisher: add_to_queue()
        Publisher->>Gate: mark_published()
    else Request Changes
        Mkt->>Route: POST /{id}/changes
        Route->>Gate: request_changes()
        Gate-->>Mkt: Notify: CONTENT_CHANGES
        Gate-->>AI: Back to draft/pending_review
    else Rejection
        Mkt->>Route: POST /{id}/reject (with comment)
        Route->>Gate: reject_content()
        Gate->>Learn: _feed_rejection_to_learning_loop()
        Gate-->>Mkt: Notify: CONTENT_REJECTED
    end
```
