from turtle import *
from superturtle import *
from superturtle.movement import *

segment_positions = [] 
def draw_web_line(side_length):
    global segment_positions
    fly(-350, 350)
    for side in range(5):
        draw_segmented_line(side_length)
        right(22.5)
        fly(-350, 350)
        #right(22.5)
        
def draw_segmented_line(side_length):
    "Draws a line with 4 equal segments and marks the points"
    segment_length = side_length / 4
    line_segments = []
    for segment in range(4):
        forward(segment_length)
        mark_point()  # Mark the points at each segment
        line_segments.append(pos())
    segment_positions.append(line_segments)


def mark_point():
    "Marks a point at the current location"
    dot(5, "black")  # Draw a dot to mark the segment points

def connect_segments():
    "Connects the corresponding segment points of adjacent lines"
    global segment_positions
    for i in range(4):  # Iterate over the 4 segments
        for j in range(5):  # Iterate over the 5 lines
            next_j = (j + 1) % 5  # To wrap around to the first line after the fifth
                        # Skip connections if either segment is near the x-axis or y-axis
            if segment_positions[j][i][0] == -350 or segment_positions[next_j][i][1] == 350:
                continue

            penup()
            goto(segment_positions[j][i])  # Go to the current segment
            pendown()
            goto(segment_positions[next_j][i])  # Draw a line to the next segment

# Main function to draw the web
def draw_web(side_length):
    draw_web_line(side_length)
    connect_segments()


# Draw the web lines
# draw_web(300)
# hideturtle()
# done()

def draw_circle(radius, x, y, color=None):
    "Draw a circle with the given radius at the (x, y) position. Optionally fill with color."
    penup()
    goto(x, y - radius)  # Move to the correct start point
    pendown()
    
    if color:
        fillcolor(color)  # Set the fill color
        begin_fill()  # Start filling the circle with color
    
    circle(radius)  # Draw the circle
    
    if color:
        end_fill()  # End the filling

def draw_spider():


    # Step 1: Draw the big circle (spider body) on top of the small circle
     draw_circle(60, 30, 60, color="grey")  

    # Step 2: Draw the small circle (spider head)
     draw_circle(30, 30, 0, color="black")  

    # Step 3: Draw legs on big circle
     draw_legs(60, 30, 60)

def draw_legs(radius, x, y):
    "Draws legs starting from the perimeter of the big circle (spider's body)"
    leg_length = 50  # Length of the legs
    pensize(4)
    
    # Draw legs at equal angles from the top of the big circle
    angles = [-60, -30, 0, 30, 150, 180, 210, 240]  # Angles for legs (top-left, top-right, and bottom)
    
    for angle in angles:
        penup()
        goto(x, y)  # Go to the center of the big circle
        setheading(angle)  # Set the heading to the desired angle
        forward(radius)  # Move forward to the perimeter of the big circle
        pendown()
        forward(leg_length)  # Draw the leg
        penup()
        backward(leg_length)  # Move back to the perimeter of the big circle

def draw_connection_line():
    "Draw a line from the top of the big circle (head) to the center of the small circle (body)"
    penup()
    goto(30, 400)  
    pendown()
    goto(30, 120)  # Draw a line to the center of the small circle (spider's body)
    penup()
    goto(0, 0)

def drawing(side_length): 
    draw_web(side_length)
    penup()
    goto(0, 0)
    setheading(0)
    pendown()
    draw_spider()
    draw_connection_line()
    hideturtle()
    done()
    
drawing(300)