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

$fn = 250;

REEL_H = 42;
REEL_D = 94;
REEL_OUTER_WALL_H = 4;
REEL_OUTER_WALL_W = 3;

REEL_INNER_D = 25.7 + 6;
REEL_INNER_H = 19.5;
REEL_INNER_WALL_W = 3;

SPOKE_H = 3;

ROTATIONS = 14;

module notches (pos = [0, 0, 0], pad = 0) {
    translate(pos) {
        intersection () {
            cylinder(r = R(29.5 + pad), h = 6, center = true);
            rotate([0, 45, 0]) cube([3, 31, 3], center = true);
        }
    }
}

module reel_spiral () {
    difference () {
        union () {
            //outer wall
            translate([0, 0, REEL_OUTER_WALL_H / 2]) difference () {
                cylinder(r = R(REEL_D), h = REEL_OUTER_WALL_H, center = true);
                cylinder(r = R(REEL_D) - REEL_OUTER_WALL_W, h = REEL_OUTER_WALL_H + 1, center = true);
            }
          
            //inner wall
            translate([0, 0, REEL_INNER_H / 2]) difference () {
                cylinder(r = R(REEL_INNER_D), h = REEL_INNER_H, center = true);
                cylinder(r = R(REEL_INNER_D) - REEL_INNER_WALL_W, h = REEL_INNER_H + 1, center = true);
                translate([14, 0, 0]) rotate([0, 0, 45]) cube([10, 0.3, 20], center = true);
            }
            //top notches
            translate([0, 0, 19.4]) difference () {
                notches(pad = -0.4);
                cylinder(r = R(REEL_INNER_D) - REEL_INNER_WALL_W, h = 6 + 1, center = true);
            }
          
            //spokes
            translate([0, 0, SPOKE_H / 2]) for (i = [0:5]) {
                rotate([0, 0, i * (360 / 6)]) {
                    translate([0, ((REEL_D - REEL_INNER_D) / 2) - 1.5, 0]) {
                        cube([4.5, (REEL_D - REEL_INNER_D) / 2, SPOKE_H], center = true);
                    }
                }
            }
            
            //
            translate([0, 0, 4]) rotate([0, 0, 8]) spiral(rotations = ROTATIONS, fn = $fn, start_d = 29.5, bottom = -4);
        }
        //bottom notches
        notches(pad = 0.0);
    }
}

module reel_top () {
    difference () {
        union () {
            //outer wall
            translate([0, 0, SPOKE_H / 2]) difference () {
                cylinder(r = R(REEL_D), h = SPOKE_H, center = true);
                cylinder(r = R(REEL_D) - REEL_OUTER_WALL_W, h = REEL_OUTER_WALL_H + 1, center = true);
            }
          
            //inner wall
            translate([0, 0, SPOKE_H / 2]) difference () {
                cylinder(r = R(REEL_INNER_D), h = SPOKE_H, center = true);
                cylinder(r = R(REEL_INNER_D) - REEL_INNER_WALL_W, h = REEL_INNER_H + 1, center = true);
            }
            
            translate([0, 0, SPOKE_H / 2]) difference () {
                cylinder(r = R((REEL_INNER_D + REEL_D) / 2), h = SPOKE_H, center = true);
                cylinder(r = R((REEL_INNER_D + REEL_D) / 2) - REEL_INNER_WALL_W, h = REEL_INNER_H + 1, center = true);
            }
          
            //spokes
            translate([0, 0, SPOKE_H / 2]) for (i = [0:5]) {
                rotate([0, 0, i * (360 / 6)]) {
                    translate([0, ((REEL_D - REEL_INNER_D) / 2) - 1.5, 0]) {
                        cube([4.5, (REEL_D - REEL_INNER_D) / 2, SPOKE_H], center = true);
                    }
                }
            }
        }
        intersection () {
            cylinder(r = R(30.5), h = 6, center = true);
            rotate([0, 45, 0]) cube([3, 31, 3], center = true);
        }
    }
}


PART = "reel_frame";

if (PART == "reel_spiral") {
    reel_spiral();
} else if (PART == "reel_top") {
    rotate([180, 0, 0]) reel_top();
}