import cadquery2 as cq
from cadquery2 import exporters

# camera hinge dimensions
inner_camera_hinge = 4.2 / 2
outer_camera_hinge = 8.5 / 2
camera_hinge_width = 15

# tripod hinge dimensions
inner_tripod_hinge = 7.5 / 2
outer_tripod_hinge = 17.5 / 2
tripod_hinge_width = 5.5


camera_hinge_shape = (
    cq.Sketch().circle(outer_camera_hinge).circle(inner_camera_hinge, mode="s")
)

tripod_hinge_shape = (
    cq.Sketch().circle(outer_tripod_hinge).circle(inner_tripod_hinge, mode="s")
)

arm_width = min(tripod_hinge_width, camera_hinge_width)
arm_length = 75

camera_arm = (
    cq.Workplane("XY")
    .rect(arm_width, arm_width)
    .extrude(arm_length)
    .edges("|Z or <Z or >Z")
    .fillet(0.25)
    .faces(">Y")
    .tag("side")
    .workplane(
        centerOption="CenterOfBoundBox", offset=(camera_hinge_width - arm_width) / 2
    )
    .center(0, arm_length / 2 + (outer_camera_hinge - inner_camera_hinge))
    .placeSketch(camera_hinge_shape)
    .extrude(-camera_hinge_width)
    .center(0, -(arm_length + outer_tripod_hinge))
    # Undo previous offset + new offset
    .workplane(
        offset=-(camera_hinge_width - arm_width - tripod_hinge_width + arm_width) / 2
    )
    .placeSketch(tripod_hinge_shape)
    .extrude(-tripod_hinge_width)
)

exporters.export(camera_arm, "camera_arm.stl")
