import chroma, pixie

block:
  let ctx = newContext(newImage(300, 160))

  ctx.beginPath()
  ctx.fillStyle = "#ff6"
  ctx.fillRect(0, 0, ctx.image.width.float32, ctx.image.height.float32)

  ctx.beginPath()
  ctx.fillStyle = "blue"
  ctx.moveTo(20, 20)
  ctx.lineTo(180, 20)
  ctx.lineTo(130, 130)
  ctx.closePath()
  ctx.fill()

  ctx.clearRect(10, 10, 120, 100)

  ctx.image.writeFile("tests/images/context/clearRect_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.beginPath()
  ctx.strokeStyle = "blue"
  ctx.moveTo(20, 20)
  ctx.lineTo(200, 20)
  ctx.stroke()

  ctx.beginPath()
  ctx.strokeStyle = "green"
  ctx.moveTo(20, 20)
  ctx.lineTo(120, 120)
  ctx.stroke()

  ctx.image.writeFile("tests/images/context/beginPath_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.beginPath()
  ctx.moveTo(50, 50)
  ctx.lineTo(200, 50)
  ctx.moveTo(50, 90)
  ctx.lineTo(280, 120)
  ctx.stroke()

  ctx.image.writeFile("tests/images/context/moveTo_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  var region: Path
  region.moveTo(30, 90)
  region.lineTo(110, 20)
  region.lineTo(240, 130)
  region.lineTo(60, 130)
  region.lineTo(190, 20)
  region.lineTo(270, 90)
  region.closePath()

  ctx.fillStyle = "green"
  ctx.fill(region, wrEvenOdd)

  ctx.image.writeFile("tests/images/context/fill_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.rect(10, 10, 150, 100)
  ctx.stroke()

  ctx.image.writeFile("tests/images/context/stroke_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.lineWidth = 26
  ctx.strokeStyle = "orange"
  ctx.moveTo(20, 20)
  ctx.lineTo(160, 20)
  ctx.stroke()

  ctx.lineWidth = 14
  ctx.strokeStyle = "green"
  ctx.moveTo(20, 80)
  ctx.lineTo(220, 80)
  ctx.stroke()

  ctx.lineWidth = 4
  ctx.strokeStyle = "pink"
  ctx.moveTo(20, 140)
  ctx.lineTo(280, 140)
  ctx.stroke()

  ctx.image.writeFile("tests/images/context/stroke_2.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.lineWidth = 26
  ctx.strokeStyle = "red"

  ctx.beginPath()
  ctx.rect(25, 25, 100, 100)
  ctx.fill()
  ctx.stroke()

  ctx.beginPath()
  ctx.rect(175, 25, 100, 100)
  ctx.stroke()
  ctx.fill()

  ctx.image.writeFile("tests/images/context/stroke_3.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.beginPath()
  ctx.moveTo(20, 140)
  ctx.lineTo(120, 10)
  ctx.lineTo(220, 140)
  ctx.closePath()
  ctx.stroke()

  ctx.image.writeFile("tests/images/context/closePath_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  let
    start = vec2(50, 20)
    cp1 = vec2(230, 30)
    cp2 = vec2(150, 80)
    to = vec2(250, 100)

  ctx.beginPath()
  ctx.moveTo(start)
  ctx.bezierCurveTo(cp1, cp2, to)
  ctx.stroke()

  ctx.image.writeFile("tests/images/context/bezierCurveTo_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.beginPath()
  ctx.moveTo(30, 30)
  ctx.bezierCurveTo(120, 160, 180, 10, 220, 140)
  ctx.stroke()

  ctx.image.writeFile("tests/images/context/bezierCurveTo_2.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.moveTo(50, 20)
  ctx.quadraticCurveTo(230, 30, 50, 100)
  ctx.stroke()

  ctx.image.writeFile("tests/images/context/quadracticCurveTo_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.beginPath()
  ctx.moveTo(20, 110)
  ctx.quadraticCurveTo(230, 150, 250, 20)
  ctx.stroke()

  ctx.image.writeFile("tests/images/context/quadracticCurveTo_2.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.beginPath()
  ctx.ellipse(100, 75, 75, 50)
  ctx.stroke()

  ctx.image.writeFile("tests/images/context/ellipse_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.strokeStyle = "green"
  ctx.strokeRect(20, 10, 160, 100)

  ctx.image.writeFile("tests/images/context/strokeRect_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.lineJoin = ljBevel
  ctx.lineWidth = 15
  ctx.strokeStyle = "#38f"
  ctx.strokeRect(30, 30, 160, 90)

  ctx.image.writeFile("tests/images/context/strokeRect_2.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.setTransform(1, 0.2, 0.8, 1, 0, 0)
  ctx.fillRect(0, 0, 100, 100)

  ctx.image.writeFile("tests/images/context/setTransform_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.setTransform(1, 0.2, 0.8, 1, 0, 0)
  ctx.fillRect(0, 0, 100, 100)

  ctx.image.writeFile("tests/images/context/resetTransform_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.rotate(45 * PI / 180)
  ctx.fillRect(60, 0, 100, 30)

  ctx.image.writeFile("tests/images/context/resetTransform_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.transform(1, 0, 1.7, 1, 0, 0)
  ctx.fillStyle = "gray"
  ctx.fillRect(40, 40, 50, 20)
  ctx.fillRect(40, 90, 50, 20)

  ctx.resetTransform()
  ctx.fillStyle = "red"
  ctx.fillRect(40, 40, 50, 20)
  ctx.fillRect(40, 90, 50, 20)

  ctx.image.writeFile("tests/images/context/resetTransform_2.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.translate(110, 30)
  ctx.fillStyle = "red"
  ctx.fillRect(0, 0, 80, 80)

  ctx.setTransform(1, 0, 0, 1, 0, 0)

  ctx.fillStyle = "gray"
  ctx.fillRect(0, 0, 80, 80)

  ctx.image.writeFile("tests/images/context/translate_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.scale(9, 3)
  ctx.fillStyle = "red"
  ctx.fillRect(10, 10, 8, 20)

  ctx.setTransform(1, 0, 0, 1, 0, 0)

  ctx.fillStyle = "gray"
  ctx.fillRect(10, 10, 8, 20)

  ctx.image.writeFile("tests/images/context/scale_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.fillStyle = "gray"
  ctx.fillRect(100, 0, 80, 20)

  ctx.rotate(45 * PI / 180)
  ctx.fillStyle = "red"
  ctx.fillRect(100, 0, 80, 20)

  ctx.image.writeFile("tests/images/context/rotate_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.font = readFont("tests/fonts/Roboto-Regular_1.ttf")
  ctx.font.size = 50

  ctx.fillText("Hello world", 50, 90)

  ctx.image.writeFile("tests/images/context/fillText_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.font = readFont("tests/fonts/Roboto-Regular_1.ttf")
  ctx.font.size = 50

  ctx.strokeText("Hello world", 50, 90)

  ctx.image.writeFile("tests/images/context/strokeText_1.png")

block:
  let ctx = newContext(newImage(300, 150))

  ctx.save()

  ctx.fillStyle = "green"
  ctx.fillRect(10, 10, 100, 100)

  ctx.restore()

  ctx.fillRect(150, 40, 100, 100)

  ctx.image.writeFile("tests/images/context/save_1.png")