// Walkie Talkie Body
// The main body of the walkie talkie assembly

// Set units
@settings(defaultLengthUnit = in, kclVersion = 1.0)

// Import parameters
import height, width, thickness, chamferLength, offset, screenWidth, screenHeight, screenYPosition, screenDepth, speakerBoxWidth, speakerBoxHeight from "parameters.kcl"

// Sketch and extrude the body of the walkie talkie
body = startSketchOn(XZ)
  |> startProfile(at = [-width / 2, height / 2])
  |> xLine(length = width, tag = $chamfer1)
  |> yLine(length = -height, tag = $chamfer2)
  |> xLine(length = -width, tag = $chamfer3)
  |> close(tag = $chamfer4)
  |> extrude(%, length = thickness)
  |> chamfer(
       length = chamferLength,
       tags = [
         getNextAdjacentEdge(chamfer1),
         getNextAdjacentEdge(chamfer2),
         getNextAdjacentEdge(chamfer3),
         getNextAdjacentEdge(chamfer4)
       ],
     )

// Cut out the indentation for the case
caseIndentSketch = startSketchOn(body, face = END)
  |> startProfile(at = [
       -width / 2 + offset,
       height / 2 - (chamferLength + offset / 2 * cos(45deg))
     ])
  |> angledLine(angle = 45, endAbsoluteY = height / 2 - offset)
  |> line(endAbsolute = [
       width / 2 - (chamferLength + offset / 2 * cos(45deg)),
       height / 2 - offset
     ])
  |> angledLine(angle = -45, endAbsoluteX = width / 2 - offset)
  |> line(endAbsolute = [
       width / 2 - offset,
       -(height / 2 - (chamferLength + offset / 2 * cos(45deg)))
     ])
  |> angledLine(angle = -135, endAbsoluteY = -height / 2 + offset)
  |> line(endAbsolute = [
       -(width / 2 - (chamferLength + offset / 2 * cos(45deg))),
       -height / 2 + offset
     ])
  |> angledLine(angle = -225, endAbsoluteX = -width / 2 + offset)
  |> close()
extrude002 = extrude(caseIndentSketch, length = -0.0625)

// Create the pocket for the screen
screenCutout = startSketchOn(extrude002, face = START)
  |> startProfile(at = [-screenWidth / 2, screenYPosition])
  |> xLine(length = screenWidth, tag = $seg01)
  |> yLine(length = -screenHeight)
  |> xLine(length = -segLen(seg01))
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
  |> close()
extrude003 = extrude(screenCutout, length = screenDepth)

// Create the speaker box
speakerBox = startSketchOn(extrude002, face = START)
  |> startProfile(at = [-1.25 / 2, -.125])
  |> xLine(length = speakerBoxWidth)
  |> yLine(length = -speakerBoxHeight)
  |> xLine(length = -speakerBoxWidth)
  |> close()

extrude(speakerBox, length = -.5)
  |> appearance(color = "#277bb0")
