use nom::{
    IResult, Parser,
    branch::alt,
    character::complete::{char, space0},
    combinator::map,
    multi::{many, many_m_n},
    sequence::{preceded, terminated},
};

use crate::parser::util::line_terminated;

pub(super) fn thematic_break<'a>() -> impl FnMut(&'a str) -> IResult<&'a str, ()> {
    move |input: &str| {
        map(
            line_terminated(preceded(
                many_m_n(0, 3, char(' ')),
                terminated(
                    alt((
                        many(3.., char('-')),
                        many(3.., char('_')),
                        many(3.., char('*')),
                    )),
                    space0,
                ),
            )),
            |_: Vec<_>| (),
        )
        .parse(input)
    }
}
