use mnote_editor_core::{
    apply_ai_pipeline, EditorAiScenario, EditorInputKind, EditorPipelineRequest,
};

#[test]
fn ai_pipeline_turns_meeting_notes_into_todos() {
    let result = apply_ai_pipeline(EditorPipelineRequest {
        kind: EditorInputKind::PlainText,
        scenario: EditorAiScenario::MeetingNotesToTodos,
        input: "待办：整理会议纪要\n普通段落".into(),
    })
    .expect("pipeline should succeed");

    assert_eq!(
        result.document.blocks()[0].block_type.as_editor_label(),
        "todo"
    );
    assert_eq!(result.audit.len(), 1);
    assert!(result
        .change_report
        .updated_blocks
        .contains(&"imported_1".to_string()));
    assert!(result.markdown.contains("待办：整理会议纪要"));
}

#[test]
fn ai_pipeline_refines_long_paragraph_to_title() {
    let result = apply_ai_pipeline(EditorPipelineRequest {
        kind: EditorInputKind::PlainText,
        scenario: EditorAiScenario::LongParagraphToTitle,
        input: "这是一个很长的段落 用于提炼 标题".into(),
    })
    .expect("pipeline should succeed");

    assert_eq!(
        result.document.blocks()[0].block_type.as_editor_label(),
        "heading"
    );
    assert_eq!(result.document.blocks()[0].heading_level, Some(1));
    assert_eq!(result.audit.len(), 1);
    assert!(result
        .change_report
        .updated_blocks
        .contains(&"imported_1".to_string()));
}

#[test]
fn ai_pipeline_reorders_first_block_after_second() {
    let result = apply_ai_pipeline(EditorPipelineRequest {
        kind: EditorInputKind::PlainText,
        scenario: EditorAiScenario::PageReorder,
        input: "第一页\n\n第二页".into(),
    })
    .expect("pipeline should succeed");

    assert_eq!(result.document.blocks()[0].content.text, "第二页");
    assert_eq!(result.document.blocks()[1].content.text, "第一页");
    assert_eq!(result.audit.len(), 1);
    assert_eq!(
        result.change_report.moved_blocks,
        vec!["imported_1".to_string()]
    );
}
