use docx_rs::*;

pub fn main() -> Result<(), DocxError> {
    let path = std::path::Path::new("./output/examples/toc_with_style_level.docx");
    let file = std::fs::File::create(path).unwrap();

    let style1 = Style::new("Heading1", StyleType::Paragraph).name("Heading 1");
    let style2 = Style::new("StyleLevel1", StyleType::Paragraph)
        .name("Style Level1")
        .based_on("Heading1");
    let style3 = Style::new("StyleLevel4", StyleType::Paragraph)
        .name("Style Level4")
        .based_on("Heading4");
    let style4 = Style::new("Heading4", StyleType::Paragraph).name("Heading 4");

    let p1 = Paragraph::new()
        .add_run(Run::new().add_text("Hello"))
        .style("Heading1")
        .page_break_before(true);

    let p2 = Paragraph::new()
        .add_run(Run::new().add_text("Foo"))
        .style("StyleLevel1")
        .page_break_before(true);

    let p3 = Paragraph::new()
        .add_run(Run::new().add_text("Bar"))
        .style("StyleLevel4")
        .page_break_before(true);
    Docx::new()
        .add_style(style1)
        .add_style(style2)
        .add_style(style3)
        .add_style(style4)
        .add_table_of_contents(
            TableOfContents::new()
                .heading_styles_range(1, 3)
                .add_style_with_level(StyleWithLevel::new("StyleLevel1", 1))
                .add_style_with_level(StyleWithLevel::new("StyleLevel4", 4))
                .alias("Table of contents")
                .auto(),
        )
        .add_paragraph(p1)
        .add_paragraph(p2)
        .add_paragraph(p3)
        .build()
        .pack(file)?;
    Ok(())
}
