shader_type spatial;
render_mode specular_disabled;

// --- TEXTURE E COLORE BASE ---
uniform sampler2D albedo_texture : source_color, filter_nearest_mipmap;
uniform vec4 color_tint : source_color = vec4(1.0);

// --- CORREZIONE IMMAGINE ---
uniform float saturation : hint_range(0.0, 2.0) = 1.0; 
uniform float brightness : hint_range(0.0, 2.0) = 1.0;

// --- LUCE E OMBRA ---
uniform float light_steps = 4.0; // Gradini di luce
uniform float shadow_intensity : hint_range(0.0, 1.0) = 0.5; // Quanto è scura l'ombra (0=nera)

// *** NUOVO PARAMETRO ***
// Colore con cui tingere le ombre. Default: Grigio-Bluastro (Cool shadows)
uniform vec4 shadow_tint : source_color = vec4(0.6, 0.6, 0.7, 1.0); 

void vertex() {
	// Vuoto per prop statici
}

void fragment() {
	vec4 tex_color = texture(albedo_texture, UV);
	vec3 base_rgb = tex_color.rgb * color_tint.rgb;

	// --- SATURAZIONE ---
	float luminance = dot(base_rgb, vec3(0.299, 0.587, 0.114));
	vec3 saturated_color = mix(vec3(luminance), base_rgb, saturation);

	// --- LUMINOSITA' ---
	ALBEDO = saturated_color * brightness;
	
	ROUGHNESS = 1.0;
	SPECULAR = 0.0;
}

void light() {
	// --- CEL SHADING ---
	float NdotL = dot(NORMAL, LIGHT);
	float light_amount = clamp(NdotL, 0.0, 1.0);
	
	// Gradini
	light_amount = ceil(light_amount * light_steps) / light_steps;
	
	// Ombre proiettate (attenuazione)
	float shadow = ATTENUATION;
	shadow = ceil(shadow * light_steps) / light_steps;
	
	// Calcolo quanta luce totale riceve il pixel (0.0 = ombra totale, 1.0 = luce piena)
	float final_light_factor = light_amount * shadow;

	// --- IL TRUCCO DEL HUE SHIFT ---
	// Invece di moltiplicare solo per la luce, facciamo un mix tra:
	// A) Colore in Ombra (Albedo * Tinta Ombra * Intensità minima)
	// B) Colore Illuminato (Albedo * Colore Luce)
	
	vec3 lit_color = ALBEDO * LIGHT_COLOR;
	vec3 shadowed_color = ALBEDO * shadow_tint.rgb * shadow_intensity; // L'ombra si colora!
	
	// Mischiamo i due stati in base alla luce ricevuta
	vec3 final_color = mix(shadowed_color, lit_color, final_light_factor);
	
	DIFFUSE_LIGHT += final_color / PI;
}