#!/usr/bin/env python3
"""Installa nell'app le carte squadrate a mano, da assets/squared/.

Il contrario di import_official_art.py: lì la sorgente era Catch Up, qui e' il
lavoro di Photoshop di Paolo. Legge queste cartelle, se ci sono:

  regions-base/       1.jpg..68.jpg        520x520   -> pwa/img/regions/
  regions-expansion/  0.jpg, 69..76.jpg    827x827   -> ridotte a 520x520
  sanctuaries/        S0.jpg..S52.jpg      360x556   -> pwa/img/sanctuaries/

Prima di scrivere passa comunque da squadra(): se resta un angolo bianco per
distrazione lo chiude, e stampa quali carte ha dovuto correggere.

DOPO aver eseguito questo script i descrittori ORB non corrispondono piu' alle
immagini: rilanciare
  /usr/bin/python3 recognition/orb_gallery.py --rebuild <id toccati>
  /usr/bin/python3 recognition/test_gallery.py assets/photos/tableaus/tavolo.jpg --expect 68,24,28,23,42,25,7,2

Uso:  /usr/bin/python3 recognition/install_squared.py [--src DIR] [--dry]
"""
import os, glob, argparse, cv2
from import_official_art import squadra, REG_SIZE, SAN_SIZE

ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
IMG = os.path.join(ROOT, "pwa", "img")
SRC_DEFAULT = os.path.join(ROOT, "assets", "squared")


def installa(files, outdir, size, dry):
    corrette, n = [], 0
    for f in files:
        im = cv2.imread(f)
        if im is None:
            raise SystemExit("illeggibile: " + f)
        im, px = squadra(im)
        if px:
            corrette.append((os.path.basename(f), px))
        im = cv2.resize(im, size, interpolation=cv2.INTER_AREA)
        if not dry:
            cv2.imwrite(os.path.join(outdir, os.path.basename(f)), im, [cv2.IMWRITE_JPEG_QUALITY, 88])
        n += 1
    return n, corrette


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--src", default=SRC_DEFAULT)
    ap.add_argument("--dry", action="store_true")
    a = ap.parse_args()

    gruppi = [
        ("regions-base", os.path.join(IMG, "regions"), REG_SIZE),
        ("regions-expansion", os.path.join(IMG, "regions"), REG_SIZE),
        ("sanctuaries", os.path.join(IMG, "sanctuaries"), SAN_SIZE),
    ]
    for nome, out, size in gruppi:
        d = os.path.join(a.src, nome)
        if not os.path.isdir(d):
            continue
        files = sorted(glob.glob(d + "/*.jpg"))
        if not files:
            continue
        n, corrette = installa(files, out, size, a.dry)
        print("%-22s %3d carte -> %s" % (nome, n, os.path.relpath(out, ROOT)))
        for f, px in corrette:
            print("      angolo bianco chiuso automaticamente: %s (%d px)" % (f, px))
    print("fatto." + (" (dry run, niente scritto)" if a.dry else
                      "  ORA rigenera la galleria ORB, vedi l'intestazione dello script."))


if __name__ == "__main__":
    main()
