#!/usr/bin/env python3
"""Register one already verified App Pack release in the control plane."""

from __future__ import annotations

import argparse
import json
import sys
from datetime import datetime
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(BASE_DIR))
from sqlalchemy import select
from config.control_plane import get_control_plane_session
from bridge_platform.packages.wordpress_pack import verify_signed_pack
from bridge_platform.tenants.models import WordPressPackageRelease


def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("artifact")
    parser.add_argument("release")
    parser.add_argument("--public-key", default="/var/www/html/.platform-signing/wordpress-app-pack-ed25519.pub.pem")
    args = parser.parse_args()
    artifact, release_path = Path(args.artifact).resolve(), Path(args.release).resolve()
    verify_signed_pack(artifact=artifact, release_path=release_path, public_key_path=Path(args.public_key))
    data = json.loads(release_path.read_text(encoding="utf-8"))
    with get_control_plane_session() as session:
        record = session.execute(select(WordPressPackageRelease).where(
            WordPressPackageRelease.package_id == data["package_id"],
            WordPressPackageRelease.version == data["version"],
        )).scalar_one_or_none()
        if record is None:
            record = WordPressPackageRelease(package_id=data["package_id"], version=data["version"])
            session.add(record)
        record.app_id = data["app_id"]
        record.artifact_name = data["artifact_name"]
        record.artifact_path = str(artifact)
        record.artifact_size = data["artifact_size"]
        record.sha256 = data["sha256"]
        record.signature = data["signature"]
        record.signature_algorithm = "Ed25519"
        record.status = "test"
        record.compatibility_json = {
            "bridge": data["minimum_bridge_version"], "wordpress": data["minimum_wordpress_version"],
            "php": data["minimum_php_version"],
            "plugin_file": data["plugin_file"],
            "release_notes": data.get("release_notes", []),
        }
        record.capabilities_json = data["capabilities"]
        record.published_at = datetime.utcnow()
        session.commit()
    print(json.dumps({"status": "registered", "package_id": data["package_id"], "version": data["version"]}))
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
