#!/bin/bash
# This takes a JSON file generated by Devel::Cover::Report::Codecovbash
# and checks if every line is covered.

if [[ $# -eq 0 ]]; then
    echo "Usage: $0 build/cover_db/codecov.json" >&2
    exit 1
fi

input_file=$1
if [[ ! -f $input_file ]]; then
    echo "Input file $input_file does not exist" >&2
    exit 1
fi

limit=${2:-500}

declare -i counter=0

echo "Checking for uncovered lines" >&2

while read -r file line; do
    [[ $line -eq 0 ]] && continue
    if [[ -f "$file" ]]; then
        content=$(sed -n "${line}p" "$file")
        printf "%-60s %s\n" "$file:$line" "| $content"
        [[ $GITHUB_ACTIONS == true ]] && echo "::warning file=${file},line=${line},title=Uncovered Line::${content}"
        counter+=1
        if [[ $counter -ge $limit ]]; then
            echo "Reached limit of $limit printed lines. Stopping." >&2
            break
        fi
    else
        echo "Warning: File '$file' not found." >&2
    fi
done < <(jq -r '.coverage | to_entries[] | .key as $file | .value | to_entries[] | select(.value == 0) | "\($file) \(.key)"' "$input_file")

[[ $GITHUB_ACTIONS == true ]] && echo "::notice ::Found $counter uncovered lines."
if [[ $counter -gt 0 ]]; then
    echo "$counter uncovered lines" >&2
    exit 1
fi

echo "All lines covered \\o/" >&2
