#![cfg_attr(not(feature = "help"), allow(unused_variables))]

// Internal
use crate::builder::Command;
use crate::builder::StyledStr;
use crate::output::Usage;

/// Writes the parser help to the wrapped stream.
pub(crate) fn write_help(writer: &mut StyledStr, cmd: &Command, usage: &Usage<'_>, use_long: bool) {
    debug!("write_help");

    if let Some(h) = cmd.get_override_help() {
        writer.extend(h.iter());
    } else {
        #[cfg(feature = "help")]
        {
            use super::AutoHelp;
            use super::HelpTemplate;
            if let Some(tmpl) = cmd.get_help_template() {
                for (style, content) in tmpl.iter() {
                    if style.is_none() {
                        HelpTemplate::new(writer, cmd, usage, use_long)
                            .write_templated_help(content);
                    } else {
                        writer.stylize(style, content);
                    }
                }
            } else {
                AutoHelp::new(writer, cmd, usage, use_long).write_help();
            }
        }

        #[cfg(not(feature = "help"))]
        {
            debug!("write_help: no help, `Command::override_help` and `help` is missing");
        }
    }

    // Remove any extra lines caused by book keeping
    writer.trim();
    // Ensure there is still a trailing newline
    writer.none("\n");
}
