// Test fixtures with known Gutenberg-style texts and expected outputs
// WHY: Golden-file testing requires deterministic input/output pairs for validation

/// Simple single-line text with clear sentence boundaries
pub const SIMPLE_TEXT: &str = "Hello world. This is a test. How are you?";

/// Expected sentence output for SIMPLE_TEXT
/// Format: index<TAB>sentence<TAB>(start_line,start_col,end_line,end_col)
pub const SIMPLE_EXPECTED: &str = r#"0	Hello world.	(1,1,1,13)
1	This is a test.	(1,14,1,29)
2	How are you?	(1,30,1,42)"#;

/// Multi-line text with line breaks, quotes, and Unicode
#[allow(dead_code)]
pub const COMPLEX_TEXT: &str = r#"Hello world. This is a test sentence.

How are you doing today? I hope you're well!

"I am fine," she said. Then she walked away.

This sentence has
line breaks in the middle. But it should still work.

Final sentence with émojis 🦀 and Unicode 世界."#;

/// Expected sentence output for COMPLEX_TEXT
/// WHY: Line breaks within sentences should be normalized to spaces
#[allow(dead_code)]
pub const COMPLEX_EXPECTED: &str = r#"0	Hello world.	(1,1,1,12)
1	This is a test sentence.	(1,13,1,37)
2	How are you doing today?	(1,38,3,24)
3	I hope you're well!	(3,25,3,44)
4	"I am fine," she said.	(3,45,5,22)
5	Then she walked away.	(5,23,5,44)
6	This sentence has line breaks in the middle.	(5,45,8,26)
7	But it should still work.	(8,27,8,52)
8	Final sentence with émojis 🦀 and Unicode 世界.	(8,53,10,45)"#;

/// Text with challenging punctuation patterns
pub const PUNCTUATION_TEXT: &str = r#"Dr. Smith went to the U.S.A. yesterday. He said "Hello there!" to Mr. Jones.

She asked, "How are you?" Then he replied: "I'm fine, thanks."

This costs £10.50 in the U.K. However, it's $15.25 in the U.S."#;

/// Expected output for punctuation with SIMPLE rules (current implementation)
/// WHY: With closing delimiter fix, abbreviations are now properly handled
pub const PUNCTUATION_SIMPLE_EXPECTED: &str = r#"0	Dr. Smith went to the U.S.A. yesterday.	(1,1,1,40)
1	He said "Hello there!" to Mr. Jones.	(1,41,1,77)
2	She asked, "How are you?"	(3,1,3,26)
3	Then he replied: "I'm fine, thanks."	(3,27,3,63)
4	This costs £10.50 in the U.K.	(5,1,5,30)
5	However, it's $15.25 in the U.S.	(5,31,5,63)"#;

/// Expected output for punctuation with COMPLETE rules (end goal)
/// WHY: Complete rules should properly handle abbreviations and not split incorrectly
#[allow(dead_code)]
pub const PUNCTUATION_COMPLETE_EXPECTED: &str = r#"0	Dr. Smith went to the U.S.A. yesterday.	(1,1,1,38)
1	He said "Hello there!" to Mr. Jones.	(1,40,1,72)
2	She asked, "How are you?"	(3,1,3,25)
3	Then he replied: "I'm fine, thanks."	(3,27,3,60)
4	This costs £10.50 in the U.K.	(5,1,5,29)
5	However, it's $15.25 in the U.S.	(5,31,5,62)"#;

/// Minimal text for performance testing
pub const MINIMAL_TEXT: &str = "Test.";

/// Expected output for minimal text
#[allow(dead_code)]
pub const MINIMAL_EXPECTED: &str = "0\tTest.\t(1,1,1,5)";

/// Large text block for throughput testing (500+ sentences)
#[allow(dead_code)]
pub fn generate_large_text() -> String {
    let base_sentence = "This is sentence number {}. ";
    let mut result = String::new();
    
    for i in 1..=500 {
        result.push_str(&base_sentence.replace("{}", &i.to_string()));
        if i % 50 == 0 {
            result.push('\n');
        }
    }
    
    result
}

/// Generate expected output for large text
#[allow(dead_code)]
pub fn generate_large_expected() -> String {
    let mut result = String::new();
    let mut col = 1;
    let line = 1; // All sentences on one line in this implementation
    
    for i in 0..500 {
        let sentence = format!("This is sentence number {}.", i + 1);
        let start_col = col;
        let end_col = col + sentence.len(); // Match actual detector behavior
        
        result.push_str(&format!("{}\t{}\t({},{},{},{})", 
            i, sentence, line, start_col, line, end_col));
        
        if i < 499 {
            result.push('\n');
        }
        
        col = end_col + 1; // Next sentence starts immediately after current end
    }
    
    result
}