#version 330 core

in VS_OUT {
	vec3		fpos;
	vec3		fn;
	vec2		texc;
} fsin;

out vec4		fcolor;

uniform sampler2D	diftex;

const int		lmax = 30;

uniform int		lcount;
uniform	vec3		lpos[lmax];
uniform vec3		vpos;

void main(void)
{
	vec3	l, v, n, difcolor, lcolor, ambient, halfdir, result;
	float	diff, spec, specf, dist, attenuation;
	int	i;

	n = normalize(fsin.fn);
	v = normalize(vpos-fsin.fpos);

	ambient = vec3(0.001);

	difcolor = vec3(texture(diftex, fsin.texc));

	/* lcolor = vec3(0.3, 0.0, 0.1); */
	lcolor = vec3(1.0);

	specf = 0.2;

	result = vec3(0.0);

	for (i = 0; i < lcount; i++) {
		l = normalize(lpos[i]-fsin.fpos);
		halfdir = normalize(l+v);

		diff = max(dot(n, l), 0.0);

		spec = pow(max(dot(n, halfdir), 0.0), 16.0)*specf;

		dist = length(lpos[i]-fsin.fpos);
		attenuation = 1.0/dist;

		result += (diff+spec)*difcolor*lcolor*attenuation;
	}

	fcolor = vec4(ambient+result, 1.0);
}