#!/bin/bash

set -u

cd /var/www/html/IMBD || exit 1

# 3 ساعات و30 دقيقة
INTERVAL=12600

while true; do
    START_TIME=$(date +%s)

    echo
    echo "========================================"
    echo "UPDATE START: $(date)"
    echo "========================================"

    if ! curl -fsS --max-time 10 \
        http://127.0.0.1:9989/ >/dev/null; then

        echo "UPDATE SKIPPED: extractor 9989 is unavailable"

    else
        cp -a streamimdb-top.m3u \
            streamimdb-top.m3u.previous 2>/dev/null || true

        cp -a streamimdb-auto.json \
            streamimdb-auto.json.previous 2>/dev/null || true

        /usr/bin/flock -n /run/streamimdb-updater.lock \
            /bin/bash /var/www/html/IMBD/run.sh

        RESULT=$?

        M3U_COUNT=$(grep -c '^#EXTINF' \
            /var/www/html/IMBD/streamimdb-top.m3u 2>/dev/null || true)

        JSON_COUNT=$(python3 -c '
import json
p="/var/www/html/IMBD/streamimdb-auto.json"
print(len(json.load(open(p, encoding="utf-8"))))
' 2>/dev/null || echo 0)

        M3U_COUNT=${M3U_COUNT:-0}
        JSON_COUNT=${JSON_COUNT:-0}

        echo "RESULT: $RESULT"
        echo "M3U: $M3U_COUNT"
        echo "JSON: $JSON_COUNT"

        if [ "$M3U_COUNT" -eq 0 ] || [ "$JSON_COUNT" -eq 0 ]; then
            OLD_COUNT=$(grep -c '^#EXTINF' \
                streamimdb-top.m3u.previous 2>/dev/null || true)

            OLD_COUNT=${OLD_COUNT:-0}

            if [ "$OLD_COUNT" -gt 0 ]; then
                echo "RESTORING PREVIOUS WORKING LIST"

                cp -f streamimdb-top.m3u.previous \
                    streamimdb-top.m3u

                cp -f streamimdb-auto.json.previous \
                    streamimdb-auto.json
            else
                echo "NO PREVIOUS WORKING LIST TO RESTORE"
            fi
        fi
    fi

    END_TIME=$(date +%s)
    USED_TIME=$((END_TIME - START_TIME))
    WAIT_TIME=$((INTERVAL - USED_TIME))

    if [ "$WAIT_TIME" -lt 60 ]; then
        WAIT_TIME=60
    fi

    NEXT_TIME=$((END_TIME + WAIT_TIME))

    echo "UPDATE END: $(date)"
    echo "NEXT UPDATE: $(date -d "@$NEXT_TIME")"
    echo "WAITING: $WAIT_TIME seconds"

    sleep "$WAIT_TIME"
done
