use <./common/common.scad>;
use <./knobs/scad/knob.scad>;

RAIL_SPACING_HALF_IN = 30;
HALF_IN_RAIL_D = 13;
ATTACH_H = 20;
INDEX_CARD_X = 127;
INDEX_CARD_Y = 76.2;
INDEX_CARD_43 = (INDEX_CARD_Y / 3) * 4;

module bolex_matte_box_rails_attach (pos = [0, 0, 0]) {
	$fn = 100;

	translate(pos) translate([0, 0, ATTACH_H / 2]) difference () {
		union () {
			translate([RAIL_SPACING_HALF_IN / 2, 0, 0]) cylinder(r = R(HALF_IN_RAIL_D) + 3, h = ATTACH_H, center = true);
			translate([-RAIL_SPACING_HALF_IN / 2, 0, 0]) cylinder(r = R(HALF_IN_RAIL_D) + 3, h = ATTACH_H, center = true);
			cube([RAIL_SPACING_HALF_IN, HALF_IN_RAIL_D + 6, ATTACH_H], center = true);
		}

		translate([RAIL_SPACING_HALF_IN / 2, 0, 0]) cylinder(r = R(HALF_IN_RAIL_D) + 0.3, h = ATTACH_H + 1, center = true);
		translate([-RAIL_SPACING_HALF_IN / 2, 0, 0]) cylinder(r = R(HALF_IN_RAIL_D) + 0.3, h = ATTACH_H + 1, center = true);
		cube([RAIL_SPACING_HALF_IN, 2, ATTACH_H + 1], center = true);
		//m4 bolt
		translate([0, ((HALF_IN_RAIL_D + 6) / 2) + 4, 2]) rotate([90, 0, 0]) {
			m4_nut(HALF_IN_RAIL_D + 6);
			cylinder(r = R(4.25), h = 200, center = true, $fn = 50);
		}
	}
}

module bolex_matte_box_rails_cap (pos = [0, 0, 0]) {
	$fn = 100;

	translate(pos) translate([0, 0, ATTACH_H / 2]) difference () {
		union () {
			translate([RAIL_SPACING_HALF_IN / 2, 0, 0]) cylinder(r = R(HALF_IN_RAIL_D) + 3, h = 20, center = true);
			translate([-RAIL_SPACING_HALF_IN / 2, 0, 0]) cylinder(r = R(HALF_IN_RAIL_D) + 3, h = 20, center = true);
			cube([RAIL_SPACING_HALF_IN, HALF_IN_RAIL_D + 6, ATTACH_H], center = true);
		}

		translate([RAIL_SPACING_HALF_IN / 2, 0, 4]) cylinder(r = R(HALF_IN_RAIL_D), h = 20, center = true);
		translate([-RAIL_SPACING_HALF_IN / 2, 0, 4]) cylinder(r = R(HALF_IN_RAIL_D), h = 20, center = true);
	}
}

module matte_box (pos = [0, 0, 0]) {
	translate(pos) {
		translate([0, 0, 8 / 2]) difference () {
			rounded_cube([INDEX_CARD_43, INDEX_CARD_Y + 8,  8], d = 5, $fn = 40, center = true);
			cube([INDEX_CARD_43 - 12, INDEX_CARD_Y - 4,  8 + 1], center = true);
			translate([2, 0, 0]) cube([INDEX_CARD_43, INDEX_CARD_Y + 1,  1.5], center = true);
		}
		translate([0, 0, (10 / 2) + (20 / 2)]) difference () {
			rounded_cube([INDEX_CARD_43, INDEX_CARD_Y + 8,  20],  d = 5, $fn = 40, center = true);
			rounded_cube([INDEX_CARD_43 - 4, INDEX_CARD_Y + 8 - 4,  20 + 1],  d = 5, $fn = 40, center = true);
		} 
	}
}

module bolex_matte_box () {
	BASE_Y = 100;
	BASE_DIST = BASE_Y - ((INDEX_CARD_Y + 8) / 2);
	bolex_matte_box_rails_attach([0, -BASE_Y, 0]);
	translate([0, (-BASE_DIST / 2) - ((INDEX_CARD_Y + 8) / 2)  + 4, 8 / 2]) {
		cube([20, BASE_DIST - 2, 8], center = true);
		translate([6, 0, 6]) cube([3, BASE_DIST - 4, 20], center = true); 
		translate([-6, 0, 6]) cube([3, BASE_DIST - 4, 20], center = true); 
	}
	matte_box();
}

PART = "default";

if (PART == "default") {
	bolex_matte_box();
} else if (PART == "knob") {
	knob(H = 10, D = 14, DEPTH = 4, BOLT = "M4", TYPE = "hex");
}