class Playbook::PbDocs::KitExample

def description

def description
  @description ||= read_kit_file("_#{example_key}.md")
end

def example

def example
  if type == "rails"
    render inline: source
  elsif type == "react"
    react_component example_key.camelize, { dark: dark }
  end
end

def highlighter

def highlighter
  type.eql?("rails") ? "erb" : "react"
end

def read_kit_file(*args)

def read_kit_file(*args)
  path = ::Playbook.kit_path(kit, "docs", *args)
  path.exist? ? path.read : ""
end

def sanitize_code(stringified_code)

def sanitize_code(stringified_code)
  stringified_code = stringified_code.gsub('"../.."', '"playbook-ui"')
                                     .gsub('"../../"', '"playbook-ui"')
                                     .gsub("'../../'", "'playbook-ui'")
                                     .gsub("'../..'", "'playbook-ui'")
                                     .gsub(%r{from "../.*}, "from 'playbook-ui'")
                                     .gsub(%r{from '../.*}, "from 'playbook-ui'")
  stringified_code = dark ? stringified_code.gsub("{...props}", "dark") : stringified_code.gsub(/\s*{...props}\s*\n/, "\n")
  if stringified_code.include?("props: { ")
    stringified_code = stringified_code.gsub("props: {", "props: {dark: true,") if type == "rails" && dark
  elsif type == "rails" && dark
    stringified_code = stringified_code.gsub("props: {", "props: {\n    dark: true,")
  end
  stringified_code
end

def source

def source
  @source ||= begin
    extension = type == "react" ? "jsx" : "html.erb"
    stringified_code = read_kit_file("_#{example_key}.#{extension}")
    sanitize_code(stringified_code)
  end
end