#version 400 core
uniform mat4 mvMatrix;
uniform mat4 projMatrix;
uniform mat3 normalMatrix;
uniform vec3 lDirection;

uniform vec4 color;

uniform bool isSky;
uniform bool isPhong;

in vec4 vPosition;
in vec3 vNormal;
in vec2 vUv;

out vec2 texCoords;
out vec4 ifColor;
out vec3 fPosition;
out vec3 fNormal;

void
main()
{
    vec4 vEyeCoord = mvMatrix * vPosition;
    gl_Position = projMatrix * vEyeCoord;
    fPosition = -vEyeCoord.xyz;
    fNormal = normalMatrix * vNormal;

    texCoords = vUv;

    ifColor = color;

    if(!isPhong && !isSky) {
        // Get lighting vectors
        vec3 LightDirection = normalize(vec3(1,3,1));
        vec3 nfNormal = normalize(fNormal);
        vec3 nviewDirection = normalize(fPosition);

        // Compute diffuse component
        float diffuse = max(0.0, dot(nfNormal, LightDirection));

        // Compute specular component
        vec3 Rl = normalize(-LightDirection+2.0*nfNormal*dot(nfNormal,LightDirection));
        float specular = 0.0;//0.1*pow(max(0.0, dot(Rl, nviewDirection)), 16);

        // Vertex color (currently static, to be replaced with texture)
        vec3 color = ifColor.xyz;

        // Compute final color
        ifColor = vec4(color * (0.1 + diffuse +  specular), 1);
        //ifColor = vec4(fNormal, 1);
    }
}

