///|
pub enum CliCommand {
  Help
  Version
  Demo
  Validate
  Render
  Benchmark
} derive(Debug, Eq)

///|
pub enum CliFormat {
  Markdown
  Html
  Css
  Json
  Yaml
  Tailwind
  Figma
} derive(Debug, Eq)

///|
pub struct CliRequest {
  command : CliCommand
  format : CliFormat
  input : String
  input_path : String
  output : String
} derive(Debug, Eq)

///|
pub struct CliParseResult {
  request : CliRequest?
  errors : Array[String]
} derive(Debug, Eq)

///|
pub struct CliResult {
  output : String
  errors : Array[String]
  exit_code : Int
} derive(Debug, Eq)

///|
pub fn CliRequest::new(
  command : CliCommand,
  format : CliFormat,
  input : String,
  output : String,
) -> CliRequest {
  { command, format, input, input_path: "", output }
}

///|
pub fn CliFormat::markdown() -> CliFormat {
  Markdown
}

///|
pub fn CliFormat::html() -> CliFormat {
  Html
}

///|
pub fn CliFormat::css() -> CliFormat {
  Css
}

///|
pub fn CliFormat::json() -> CliFormat {
  Json
}

///|
pub fn CliFormat::yaml() -> CliFormat {
  Yaml
}

///|
pub fn CliFormat::tailwind() -> CliFormat {
  Tailwind
}

///|
pub fn CliFormat::figma() -> CliFormat {
  Figma
}

///|
pub fn CliCommand::render() -> CliCommand {
  Render
}