use <./common/common.scad>;
use <./common/knurledFinishLib_v2.scad>;

$fn = 90;

module key () {
    difference () {
        cylinder(r = R(6.7), h = 5, center = true);
        cylinder(r = R(4.76), h = 5.1, center = true);
        translate([0, 0, 0.75]) difference() {
            cylinder(r = R(10),  h = 5, center = true);
            cylinder(r1 = R(8.2), r2 = R(5.7), h = 5.01, center = true);
        }
    }
    translate ([0, 0, -7.5]) {
        cylinder(r = R(6.7), h = 10, center = true);
    }
}

module keyHole () {
    translate ([0, 0, 1.75]) {
        cube([10, 2, 2.5], center = true);
    }
}

module body () {
    translate([0, 0, -13.5]){
        cylinder(r = R(10), h = 2, center = true);
    }
    translate([0, 0, -16]) {
        cylinder(r = R(10), h = 3, center = true);
        translate([20, 0, 0]) {
            cylinder(r = R(10), h = 3, center = true);
        }
        translate([10, 0, 0]){
            cube([20, 10, 3], center = true);	
        }
    }
}

module pinHole () {
    pin_d = 5.34;
    translate([20, 0, -16.5]) {
        cylinder(r = R(pin_d), h = 4, center = true);
    }
}

module pin () {
    base_d = 8;
    base_h = 1;
    pin_d = 5.34 - 0.015;
    pin_h = 17.3;
    notch = 3;
    cylinder(r = R(base_d), h = base_h, center = true); //base
    difference () {
        translate([0, 0, (pin_h/2) + (base_h/2)]) cylinder(r = R(pin_d), h = pin_h, center = true);    //pin
        translate([0, 0, pin_h - (notch/2) + (base_h/2)]) cube([notch, notch, notch], center = true);
    }
      
}

module pinTop () {
    base_d = 8;
    base_h = 2;
    notch = 3 - 0.02;

    cylinder(r = R(base_d), h = base_h, center = true); //base
    translate([0, 0, (notch / 2) + (base_h / 2)]) cube([notch, notch, notch], center = true);
}

module handle () {
    pin_d = 5.34 +.3;
    handle_d = 10.5;
    difference () {
        cylinder(r = R(handle_d), h = 13.75, center = true);
        cylinder(r = R(pin_d), h = 15, center = true);
    }
}

module helper () {
    translate([0, 15, -7.5]) {
        cylinder(r = R(12), h = 20, center = true);
    }
}

module bolex_rewind_key ( DECOYS = false) {
    difference () {
        body();
        //pinHole();
    }
    translate([20, 0, -24.5 - 8.5]) cylinder(r = R(5.2), h = 18);
    translate([20, 0, -24.5 - 8.5]) cylinder(r = R(8), h = 1.5);

    difference () {
        key();
        keyHole();
    }
    //decoys
    if (DECOYS) {
        translate([32,0, -15.5]) cube([4, 4, 4], center = true);
        translate([-18, 0, -15.5]) cube([4, 4, 4], center = true);
        translate([0, 15, -15.5]) cube([4, 4, 4], center = true);
        translate([0, -15, -15.5]) cube([4, 4, 4], center = true);
    }
}

module bolex_rewind_knurled_handle () {
    difference () {
        knurled_cyl(13, 13, 2, 2, .3, 0, 0);
        cylinder(r = R(5.6), h = 40, center = true);
    }
}

module bolex_rewind_knurled_handle_SPLIT (piece = 0) {
    difference () {
        bolex_rewind_knurled_handle();
        if (piece == 0) {
            translate([15, 0, 0]) cube([30, 30, 41], center = true);
            translate([0, 3.7, 13.75 / 2]) cube([2, 2, 5], center = true);
            translate([0, -3.7, 13.75 / 2]) cube([2, 2, 5], center = true);
        } else if (piece == 1) {
            difference () {
                translate([-15, 0, 0]) cube([30, 30, 41], center = true);
                translate([0, 3.7, 13.75 / 2]) cube([1.8, 1.8, 4.8], center = true);
                translate([0, -3.7, 13.75 / 2]) cube([1.8, 1.8, 4.8], center = true);
            }
        }
    }
}

PART = "bolex_rewind_key";

if (PART == "bolex_rewind_key") {
    bolex_rewind_key();
} else if (PART == "bolex_rewind_key_handle") {
    translate([-5, 0, 0]) bolex_rewind_knurled_handle_SPLIT(0);
    translate([5, 0, 0]) bolex_rewind_knurled_handle_SPLIT(1);
}