#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Ukur apakah tanda centang sejajar tengah dengan kalimatnya.

Cara: cari piksel biru (centang) di kolom kiri, kelompokkan per baris, lalu bandingkan
titik tengahnya dengan titik tengah piksel teks gelap pada kisaran baris yang sama.
Jalankan: python3 tsc_cek_centang.py <slide.jpg> [<slide2.jpg> ...]
"""
import sys

from PIL import Image

def lum(p):
    return 0.299 * p[0] + 0.587 * p[1] + 0.114 * p[2]


def cari_centang(px, w, h, x0=85, x1=130):
    baris = {}
    for y in range(h):
        for x in range(x0, x1):
            r, g, b = px[x, y]
            if b > 150 and b - r > 40 and g < 200:      # biru aksen centang
                baris.setdefault(y, 0)
                baris[y] += 1
    grup, kini = [], []
    for y in sorted(baris):
        if kini and y - kini[-1] > 6:
            grup.append(kini)
            kini = []
        kini.append(y)
    if kini:
        grup.append(kini)
    out = []
    for g in grup:
        ys = []
        for y in g:
            for x in range(x0, x1):
                r, bb = px[x, y][0], px[x, y][2]
                if bb > 150 and bb - r > 40:
                    ys.append(y)
        if ys:
            out.append((min(ys), max(ys)))
    return out


def cari_teks(px, w, y0, y1, x0=140, x1=1010):
    ys = []
    for y in range(max(0, y0), min(y1, 1350)):
        gelap = 0
        for x in range(x0, x1, 2):
            if lum(px[x, y]) < 135:
                gelap += 1
                if gelap > 1:
                    break
        if gelap > 1:
            ys.append(y)
    return (min(ys), max(ys)) if ys else None


for path in sys.argv[1:]:
    im = Image.open(path).convert("RGB")
    w, h = im.size
    px = im.load()
    print(f"\n{path.split('/')[-1]}")
    for (a, b) in cari_centang(px, w, h):
        pusat_c = (a + b) / 2
        t = cari_teks(px, w, int(pusat_c - 16), int(pusat_c + 16))
        if not t:
            continue
        pusat_t = (t[0] + t[1]) / 2
        print(f"  centang y={pusat_c:6.1f}  teks y={pusat_t:6.1f} (baris {t[0]}-{t[1]})  selisih {pusat_c - pusat_t:+.1f} px")
