#!/usr/bin/env python3
import argparse
import sys
from pathlib import Path
import yaml

ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
    sys.path.insert(0, str(ROOT))

from src.quant_engine.prepare_upload_zip import should_include


def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("--manifest", default="runtime/active_artifact_manifest.yaml")
    parser.add_argument("--root", default=".")
    parser.add_argument("--strict", action="store_true")
    args = parser.parse_args()

    manifest_path = ROOT / args.manifest
    if not manifest_path.exists():
        print(f"Manifest not found: {manifest_path}")
        return 1

    try:
        manifest = yaml.safe_load(manifest_path.read_text(encoding="utf-8"))
    except Exception as e:
        print(f"Error parsing manifest: {e}")
        return 1

    refs = set()
    if "canonical_source" in manifest:
        refs.add(manifest["canonical_source"])
    if "active_aliases" in manifest and isinstance(manifest["active_aliases"], dict):
        for val in manifest["active_aliases"].values():
            refs.add(val)
    if "manifest_rows" in manifest and isinstance(manifest["manifest_rows"], list):
        for row in manifest["manifest_rows"]:
            if isinstance(row, dict) and "active_artifact" in row:
                refs.add(row["active_artifact"])

    missing_refs = []
    for ref in sorted(refs):
        ref_path = ROOT / ref
        if not ref_path.exists():
            missing_refs.append((ref, "file_not_found"))
        else:
            # Check if it is included in upload package mode
            is_included = should_include(ref_path, mode="upload", include_xlsx=False, include_backups=False)
            if not is_included and not ref.startswith("Temp/"):
                missing_refs.append((ref, "excluded_from_package"))

    if missing_refs:
        print("Validation FAILED! Missing packaged artifact references:")
        for ref, reason in missing_refs:
            print(f"  - {ref} ({reason})")
        if args.strict:
            return 1
    else:
        print("Validation PASSED: All active artifact manifest references are present in the package.")

    return 0


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