#version 150 core

uniform vec4 lightPosition = vec4( 0.0, 0.0, 0.0, 1.0 );
uniform vec3 lightIntensity = vec3( 1.0, 1.0, 1.0 );

uniform vec3 ka;                            // Ambient reflectivity
uniform vec3 ks = vec3( 1.0, 1.0, 1.0 );    // Specular reflectivity
uniform float shininess = 150.0;            // Specular shininess factor

in vec3 position;
in vec3 normal;
in vec3 kd;            // Diffuse reflectivity

out vec4 fragColor;

vec3 adsModel( const in vec3 pos, const in vec3 n )
{
    // Calculate the vector from the light to the fragment
    vec3 s = normalize( vec3( lightPosition ) - pos );

    // Calculate the vector from the fragment to the eye position
    // (origin since this is in "eye" or "camera" space)
    vec3 v = normalize( -pos );

    // Reflect the light beam using the normal at this fragment
    vec3 r = reflect( -s, n );

    // Calculate the diffuse component
    float diffuse = max( dot( s, n ), 0.0 );

    // Calculate the specular component
    float specular = 0.0;
    if ( dot( s, n ) > 0.0 )
        specular = pow( max( dot( r, v ), 0.0 ), shininess );

    // Combine the ambient, diffuse and specular contributions
    return lightIntensity * ( ka + kd * diffuse + ks * specular );
}

void main()
{
    fragColor = vec4( adsModel( position, normalize( normal ) ), 1.0 );
}
