p :: properties {
	input_tex : Texture2D;
	tex_sampler : Sampler;

	hour_of_day : float;
}

VS_Input :: struct {
	pos : float3 @position;
	uv  : float2 @uv;
}

VS_Output :: struct {
	pos : float4 @outposition;
	uv  : float2 @uv;
}

vertex main :: (input : VS_Input) -> VS_Output {
	output : VS_Output;
	output.pos = float4(input.pos, 1.0);
	output.uv  = input.uv;
	return output;
}

apply_night :: (color : float4) -> float4 {
	result := color;
	result -= float4(0.3, 0.2, 0.0, 0.0);
	result *= 0.8;

	return result;
}

apply_twilight :: (color : float4) -> float4 {
	result := color;
	result += float4(0.2, -0.1, 0.1, 0.0);
	result *= 0.9;

	return result;
}

apply_morning :: (color : float4) -> float4 {
	return color * 1.3;
}

apply_dawn :: (color : float4) -> float4 {
	return color;
}

pixel main :: (input : VS_Output) -> float4 @outposition {
	sampled_color : float4 = sample(p.input_tex, p.tex_sampler, input.uv);

	t := 0.0;
	a := float4(0, 0, 0, 0);
	b := float4(0, 0, 0, 0);

	if p.hour_of_day > 16 {
        t = (p.hour_of_day - 16) / 6;
        a = apply_twilight(sampled_color);
        b = apply_night(sampled_color);
    } else if p.hour_of_day > 12 {
        t = (p.hour_of_day - 12) / 6;
        a = sampled_color;
        b = apply_twilight(sampled_color);
    } else if p.hour_of_day > 6 {
        t = (p.hour_of_day - 6) / 6;
        a = apply_morning(sampled_color);
        b = sampled_color;
    } else if p.hour_of_day >= 0 {
        t = p.hour_of_day / 6;
        a = apply_night(sampled_color);
        b = apply_morning(sampled_color);
    }

	return lerp(a, b, t);
}



