#!/usr/bin/env python3
"""Lokální kontrola dodané syntetické ukázky. Python 3, bez závislostí."""
import csv
import io
import sys
from pathlib import Path

HEADERS = ["row_key", "identifier", "name"]
EXPECTED = {
    "R1": ["00123", "Žofie"],
    "R2": ["03-04", "Řehoř"],
    "R3": ["1E10", "Šárka"],
    "R4": ["00007", "Jiří"],
}

def check_text(text):
    errors = []
    try:
        rows = list(csv.reader(io.StringIO(text, newline=""), delimiter=",", strict=True))
    except csv.Error as exc:
        return [f"Neplatné CSV: {exc}"]
    if not rows or rows[0] != HEADERS:
        return [f"Hlavička musí být přesně {HEADERS!r}."]
    seen = set()
    for number, row in enumerate(rows[1:], start=2):
        if len(row) != len(HEADERS):
            errors.append(f"Řádek {number}: očekávány 3 sloupce, nalezeno {len(row)}.")
            continue
        key = row[0]
        if key in seen:
            errors.append(f"Řádek {number}: duplicitní row_key {key!r}.")
        seen.add(key)
        if key not in EXPECTED:
            errors.append(f"Řádek {number}: neočekávaný row_key {key!r}.")
            continue
        for field, actual, expected in zip(HEADERS[1:], row[1:], EXPECTED[key]):
            if actual != expected:
                errors.append(f"{key} / {field}: očekáváno {expected!r}, nalezeno {actual!r}.")
    for key in EXPECTED:
        if key not in seen:
            errors.append(f"Chybí row_key {key!r}.")
    return errors

def main(argv):
    if len(argv) != 2:
        print("Použití: python3 check-csv-import.py soubor.csv", file=sys.stderr)
        return 2
    try:
        with Path(argv[1]).open("r", encoding="utf-8-sig", newline="") as handle:
            errors = check_text(handle.read())
    except (OSError, UnicodeError) as exc:
        print(f"Soubor nelze přečíst jako UTF-8: {exc}", file=sys.stderr)
        return 2
    if errors:
        for error in errors:
            print(error)
        return 1
    print("OK: 4 řádky; všechny hodnoty přesně odpovídají ukázce.")
    return 0

if __name__ == "__main__":
    sys.exit(main(sys.argv))
