struct LightSourceParameters
{
    vec4 ambient;
    vec4 diffuse;
    vec4 specular;
    vec4 position;
};
LightSourceParameters lightSource[3];
uniform mat4 modelview;
uniform vec4 light0Position;
uniform vec4 light1Position;
uniform vec4 light2Position;
varying vec3 vertex_normal;
varying vec4 vertex_position;
varying vec3 eye_direction;

vec3 unitvec(vec4 v1, vec4 v2)
{
    if (v1.w == 0.0 && v2.w == 0.0)
        return vec3(v2 - v1);
    if (v1.w == 0.0)
        return vec3(-v1);
    if (v2.w == 0.0)
        return vec3(v2);
    return v2.xyz/v2.w - v1.xyz/v1.w;
}

void main()
{
    lightSource[0] = LightSourceParameters(
        vec4(0.0, 0.0, 0.0, 1.0),
        vec4(1.0, 1.0, 1.0, 1.0),
        vec4(1.0, 1.0, 1.0, 1.0),
        vec4(0.0, 1.0, 0.0, 0.0)
    );
    lightSource[1] = LightSourceParameters(
        vec4(0.0, 0.0, 0.0, 1.0),
        vec4(0.3, 0.3, 0.5, 1.0),
        vec4(0.3, 0.3, 0.5, 1.0),
        vec4(-1.0, 0.0, 0.0, 0.0)
    );
    lightSource[2] = LightSourceParameters(
        vec4(0.2, 0.2, 0.2, 1.0),
        vec4(0.2, 0.2, 0.2, 1.0),
        vec4(0.2, 0.2, 0.2, 1.0),
        vec4(0.0, -1.0, 0.0, 0.0)
    );
    vec4 matAmbient = vec4(0.0, 0.0, 0.0, 1.0);
    vec4 matDiffuse = vec4(1.0, 0.2, 0.2, 1.0);
    vec4 matSpecular = vec4(0.5, 0.5, 0.5, 1.0);
    float matShininess = 20.0;
    vec4 diffuseSum = vec4(0.0, 0.0, 0.0, 0.0);
    vec4 specularSum = vec4(0.0, 0.0, 0.0, 0.0);
    vec4 ambientSum = vec4(0.0, 0.0, 0.0, 0.0);
    vec3 normalized_normal = normalize(vertex_normal);
    lightSource[0].position = light0Position;
    lightSource[1].position = light1Position;
    lightSource[2].position = light2Position;
    for (int light = 0; light < 3; light++) {
        vec4 light_position = lightSource[light].position;
        vec3 light_direction = normalize(unitvec(vertex_position, light_position));
        vec3 reflection = reflect(-light_direction, normalized_normal);
        specularSum += pow(max(0.0, dot(reflection, eye_direction)), matShininess) * lightSource[light].specular;
        diffuseSum += max(0.0, dot(normalized_normal, light_direction)) * lightSource[light].diffuse;
        ambientSum += lightSource[light].ambient;
    }
    gl_FragColor = (matSpecular * specularSum) + (matAmbient * ambientSum) + (matDiffuse * diffuseSum);
}
