"""Local preflight for small SKU-based WooCommerce CSVs; never connects to a store."""
import csv
import pathlib
import sys


def validate(path):
    if path.stat().st_size > 5 * 1024 * 1024:
        return ["File exceeds the educational 5 MiB limit"], 0
    issues, seen, count = [], {}, 0
    with path.open(encoding="utf-8-sig", newline="") as handle:
        reader = csv.DictReader(handle, strict=True)
        headers = reader.fieldnames or []
        required = {"Type", "SKU", "Name", "Published"}
        if len(headers) != len(set(headers)):
            issues.append("Duplicate column names")
        if not required.issubset(headers):
            return issues + ["Missing columns: " + ", ".join(sorted(required - set(headers)))], 0
        for line, row in enumerate(reader, 2):
            count += 1
            if count > 10000:
                issues.append("Row limit exceeded")
                break
            if None in row or any(value is None for value in row.values()):
                issues.append("Line %d: inconsistent column count" % line)
                continue
            sku = row["SKU"]
            if not sku or sku != sku.strip():
                issues.append("Line %d: SKU is empty or has outer whitespace" % line)
            elif sku in seen:
                issues.append("Line %d: exact duplicate SKU from line %d" % (line, seen[sku]))
            else:
                seen[sku] = line
            if not row["Name"].strip():
                issues.append("Line %d: product name is empty" % line)
            if row["Type"] not in {"simple", "variable", "variation"}:
                issues.append("Line %d: unsupported Type in this sample validator" % line)
            if row["Published"] not in {"-1", "0", "1", "2", "true", "false"}:
                issues.append("Line %d: invalid Published value" % line)
    if not count:
        issues.append("No product rows")
    return issues, count


if __name__ == "__main__":
    try:
        if len(sys.argv) != 2:
            raise ValueError("Usage: python validate-woocommerce-csv.py FILE.csv")
        errors, rows = validate(pathlib.Path(sys.argv[1]))
        for error in errors[:30]:
            print(error, file=sys.stderr)
        if errors:
            print("%d issue(s)" % len(errors), file=sys.stderr)
            sys.exit(1)
        print("%d rows: local SKU preflight passed; staging import is still required" % rows)
    except (OSError, UnicodeError, csv.Error, ValueError) as error:
        print(type(error).__name__ + ": " + str(error), file=sys.stderr)
        sys.exit(1)
