#import "lib.typ": *

#let cv(contents, use_sidebar: false) = {
  show: style
  show: smartypants
  set text(lang: lang)

  let date_formatting = {
    if lang == "de" {
      "[day]. [month repr:long] [year]"
    } else {
      "[month repr:long] [day], [year]"
    }
  }
  set page(
    paper: "a4",
    margin: (x: 0.9cm, y: 1.3cm),
    footer: [
      #set text(
        fill: luma(200),
        size: 8pt,
      )
      #_columns_3[
        #smallcaps[#datetime.today().display(date_formatting)]
      ][
        #smallcaps[#contents.about.fullname]
      ][
        #context counter(page).display()
      ]
    ],
  )

  set par(justify: true)

  header(contents.about)

  let body = {
    if "summary" in contents {
      section(
        title: "",
        {
          contents.summary.at(lang)
        },
      )
    }

    if "experience" in contents {
      let title = (en: "Professional Experience", de: "Berufserfahrung").at(lang)
      section(title: title, entries: contents.experience)[]
    }

    if "education" in contents {
      let title = (en: "Education", de: "Ausbildung").at(lang)
      section(title: title, entries: contents.thesis + contents.education)[]
    }

    if not use_sidebar {
      if "volunteering" in contents {
        let title = (en: "Volunteer Work", de: "Ehrenamt").at(lang)
        section(title: title, entries: contents.volunteering)[]
      }

      if "skills" in contents {
        let title = (en: "Qualifications", de: "Qualifikationen").at(lang)
        section(
          title: title,
          {
            skill_item(item: contents.skills)
          },
        )
      }

      if "languages" in contents {
        let title = (en: "Languages", de: "Sprachen").at(lang)
        section(
          title: title,
          {
            skill_item(item: contents.languages)
          },
        )
      }
    }
  }

  let sidebar = {
    if "volunteering" in contents {
      let title = (en: "Volunteer Work", de: "Ehrenamt").at(lang)
      [== #title]
      for e in contents.volunteering {
        [
          - *#e.title.at(lang)* (#e.date.at(lang))
            #par(e.bullets.at(0).at(lang)) \
        ]
      }
    }

    if "languages" in contents {
      let title = (en: "Languages", de: "Sprachen").at(lang)
      [== #title]
      skill_item(item: contents.languages, is_sidebar: true)
      [\ ]
    }

    if "skills" in contents {
      let title = (en: "Qualifications", de: "Kenntnisse").at(lang)
      [== #title]
      skill_item(item: contents.skills, is_sidebar: true)
    }
  }

  if not use_sidebar {
    body
    return
  }
  let margin = 1pt
  grid(
    columns: (2fr, 1fr),
    block(
      outset: 0pt,
      inset: (top: 0.4 * margin, right: 0pt, rest: margin),
      stroke: none,
      width: 100%,
      {
        set block(above: 10pt)
        show heading.where(level: 1): it => style(s => {
          let h = text(size: 18pt, upper(it))
          let dim = measure(h, s)
          stack(
            dir: ltr,
            h,
            place(
              dy: 7pt,
              dx: 10pt,
              horizon + left,
              line(stroke: accent-color, length: 100% - dim.width - 10pt),
            ),
          )
        })
        body
      },
    ),
    {
      v(20pt)
      set block(inset: (left: 20 * margin, right: 20 * margin))
      show heading: it => align(right, upper(it))
      set list(marker: "")
      show list: it => {
        set par(justify: false)
        align(right, block(it))
      }
      sidebar
    },
  )
}

#cv.with(use_sidebar: false)(yaml("content.yml"))