#!/bin/bash

RESET_COLOR="\e[39m"
ERROR_COLOR="\e[91m"


# Check if all Python API definitions end with expected suffixes
function check_python_api_doc_suffix()
{
    filename=$1

    egrep -q '/(pychrysalide|python)/' <<< $filename

    if [ $? -eq 0 ]; then

        for name in $( grep 'PYTHON_METHOD_DEF' $filename | cut -d ' ' -f 2 );
        do

            if [[ "$name" != *_METHOD ]]; then

                echo -e "[!] ${ERROR_COLOR}${filename}${RESET_COLOR}: bad Python method declaration '$name'"

            fi

        done

        for target in "PYTHON_WRAPPER_DEF" "PYTHON_VOID_WRAPPER_DEF" \
                      "PYTHON_FALSE_WRAPPER_DEF" "PYTHON_TRUE_WRAPPER_DEF"; do

            for name in $( grep $target $filename | cut -d ' ' -f 2 );
            do

                if [[ "$name" != *_WRAPPER ]]; then

                    echo -e "[!] ${ERROR_COLOR}${filename}${RESET_COLOR}: bad Python wrapper declaration '$name'"

                fi

            done

        done

        for target in "PYTHON_GETSET_DEF" "PYTHON_CAN_DEF_FULL" "PYTHON_IS_DEF_FULL" "PYTHON_HAS_DEF_FULL" \
                      "PYTHON_RAWGET_DEF_FULL" "PYTHON_GET_DEF_FULL" "PYTHON_GETSET_DEF_FULL"; do

            for name in $( grep $target $filename | cut -d ' ' -f 2 );
            do

                if [[ "$name" != *_ATTRIB ]]; then

                    echo -e "[!] ${ERROR_COLOR}${filename}${RESET_COLOR}: bad Python attribute declaration '$name'"

                fi

            done

        done

        for name in $( grep 'PYTHON_GETTER_WRAPPER_DEF' $filename | cut -d ' ' -f 2 );
        do

            if [[ "$name" != *_ATTRIB_WRAPPER ]]; then

                echo -e "[!] ${ERROR_COLOR}${filename}${RESET_COLOR}: bad Python wrapper declaration '$name'"

            fi

        done

    fi

}


if [ ! -f configure.ac ]; then
    echo "This script has to be run from the top directory."
    exit 1
fi

for file in $( find . -type f -name '*.c' -exec grep -l 'Copyright.*Cyrille Bagard$' {} \; );
do
    check_python_api_doc_suffix $file

done