#version 330 core

// Interpolated values from the vertex shaders
in vec2 UV;

// Ouput data
out vec3 color;

// Values that stay constant for the whole mesh.
uniform sampler2D myTextureSampler;
//uniform float pixWidth;
//uniform float pixHeight;





int IS_BACKGROUND = 0;
int IS_UNDEFINED = 1;
int IS_FOREGROUND = 2;
int UNSET = -1;


vec3 getColor(vec2 uvCoord) {
    return texture(myTextureSampler, uvCoord).rgb;
}

bool isBackground(vec3 c) {
    // 49,206, 11
    if (all(   lessThanEqual(c, vec3(51.0f/255.0f, 208.0f/255.0f, 13.0f/255.0f))) &&
        all(greaterThanEqual(c, vec3(47.0f/255.0f, 204.0f/255.0f, 9.0f/255.0f)))
        ) {
        return true;
    } else {
        return false;
    }
}

void main(){
    float pixWidth = 0.001174f;
    float pixHeight = 0.002083f;
    int status = UNSET;
    float pw = pixWidth;
    float ph = pixHeight;

    // Output color = color of the texture at the specified UV
    for(int w=-5;w<=5;w++){
        for(int h=-5;h<=5;h++){
            if (w+h==-10) { // first pixel
                if (isBackground(getColor(UV+vec2(pixWidth*w,pixHeight*h)))) {
                    status = IS_BACKGROUND;
                } else {
                    status = IS_FOREGROUND;
                }
            } else { // other pixels
                if (isBackground(getColor(UV+vec2(pixWidth*w,pixHeight*h)))) {
                    if (status != IS_BACKGROUND) {
                        status = IS_UNDEFINED;
                        break;
                    }
                } else {
                    if (status != IS_FOREGROUND) {
                        status = IS_UNDEFINED;
                        break;
                    }
                }
            }
        }
    }

    if (status == IS_BACKGROUND) {
        color = vec3(1.0f, 0.0f, 0.0f);
    } else if (status == IS_FOREGROUND) {
        color = vec3(0.0f, 1.0f, 0.0f);
    } else {
        color = vec3(0.0f, 0.0f, 1.0f);
    }
}
