from __future__ import annotations

import argparse
from datetime import datetime, timezone

from app.domain.enums import LicenceType
from app.models.database import SessionLocal
from app.services.provisioning import ProvisioningService


def parse_datetime(value: str | None):
    if value is None:
        return None
    return datetime.fromisoformat(value).astimezone(timezone.utc)


def main() -> None:
    parser = argparse.ArgumentParser(
        description="Create a local development Tribute Director licence."
    )
    parser.add_argument(
        "--type",
        choices=[LicenceType.PERPETUAL.value, LicenceType.SUBSCRIPTION.value],
        default=LicenceType.PERPETUAL.value,
    )
    parser.add_argument("--activation-limit", type=int, default=1)
    parser.add_argument("--subscription-expiry")
    parser.add_argument("--updates-until")
    parser.add_argument("--support-until")
    args = parser.parse_args()

    with SessionLocal() as session:
        licence = ProvisioningService(session).create_licence(
            licence_type=LicenceType(args.type),
            activation_limit=args.activation_limit,
            subscription_expiry=parse_datetime(args.subscription_expiry),
            update_entitlement_expiry=parse_datetime(args.updates_until),
            support_entitlement_expiry=parse_datetime(args.support_until),
        )
        print(licence.model_dump_json(by_alias=True, indent=2))


if __name__ == "__main__":
    main()
