import os
from PIL import Image
import colorsys

def recolor_yellow_to_purple(input_path, output_path):
    img = Image.open(input_path).convert("RGBA")
    width, height = img.size
    pixels = img.load()
    
    # Target purple color in HSV
    # We want a vibrant purple matching --on-primary-container or --primary-container
    # Let's say hue is around 280 degrees (0.77 in 0-1 range)
    target_hue = 280.0 / 360.0
    
    recolored_count = 0
    
    for x in range(width):
        for y in range(height):
            r, g, b, a = pixels[x, y]
            if a == 0:
                continue
                
            # Convert RGB to HSV
            # RGB values are 0-255, colorsys expects 0-1
            h, s, v = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)
            
            # Check if the pixel is yellow/orange
            # Yellow hue is around 40-75 degrees (0.11 to 0.21)
            # Orange/yellow can start around 35 degrees (0.097)
            # We want to avoid skin tones, which are typically warmer/redder (hue 10-30 degrees, i.e., 0.02 to 0.08)
            # and have lower saturation.
            # Bright yellow elements like the bag, scooter, shirt, helmet have high saturation (s > 0.4)
            # and high value (v > 0.4).
            
            is_yellow = False
            
            # Bright yellow/orange check
            # Hue range: 38 to 82 degrees (0.105 to 0.228)
            if 0.10 <= h <= 0.23 and s >= 0.35 and v >= 0.30:
                is_yellow = True
            # Let's also include slightly redder orange if it is highly saturated (which skin is not)
            elif 0.07 <= h < 0.10 and s >= 0.70 and v >= 0.50:
                is_yellow = True
                
            if is_yellow:
                # We shift the hue to target purple (280 degrees)
                # Keep saturation and value similar, maybe boost saturation a bit for richness
                new_h = target_hue
                new_s = min(s * 1.0, 1.0)
                new_v = v
                
                # Convert back to RGB
                new_r, new_g, new_b = colorsys.hsv_to_rgb(new_h, new_s, new_v)
                pixels[x, y] = (int(new_r * 255), int(new_g * 255), int(new_b * 255), a)
                recolored_count += 1
                
    img.save(output_path, "PNG")
    print(f"Recolored {recolored_count} pixels and saved to {output_path}")

if __name__ == "__main__":
    recolor_yellow_to_purple(
        "public/images/slider-courier-mask.png",
        "public/images/slider-courier-mask-purple.png"
    )
