#version 300 es
precision highp float;

uniform SceneUniforms {
    mat4 viewProj;
    vec4 eyePosition;
    vec4 lightPosition;
} uView;

in vec3 vPosition;
in vec3 vNormal;

out vec4 fragColor;

// TODO: PBR
// https://github.com/Moguri/panda3d-simplepbr
void main() {
    vec3 color = vec3(0.89019607843, 0.0, 0.00392156862);
    vec3 normal = normalize(vNormal);
    
    vec3 lightDir = normalize(uView.lightPosition.xyz - vPosition);
    vec3 viewDir = normalize(uView.eyePosition.xyz - vPosition);
    vec3 halfDir = normalize(lightDir + viewDir);
    float spec = pow(max(dot(normal, halfDir), 0.0), 20.0);
    vec3 specular = vec3(0.3) * spec;

    float diff = max(dot(lightDir, normal), 0.0);
    vec3 diffuse = color * diff;

    vec3 ambient = color * 0.1;

    fragColor = vec4(ambient + diffuse + specular, 1.0);
}
