"""Development example for Ariadne Mark 0.7.2a1 on its qualified Linux runtime.

Run after SDK/model setup and `ariadne init-dev .ariadne/dev`.
For a new generated image; supply actual public product facts and creation time.
"""
import argparse
from datetime import datetime
import json
from pathlib import Path

from ariadne_mark.pipeline import SDK
from ariadne_mark.provenance import Action, GenerativeSystem, MediaKind, ProvenanceRecord
from ariadne_mark.registry import Registry
from ariadne_mark.signing import SigningIdentity
from ariadne_mark.watermark import LazyWatermarker


def export_image(sdk, *, source, destination, publisher, system, version, created_at):
    record = ProvenanceRecord.create(
        publisher=publisher, system=GenerativeSystem(system, version),
        media_kind=MediaKind.IMAGE, action=Action.CREATED, created_at=created_at,
    )
    receipt = sdk.mark(Path(source), Path(destination), record)
    verification = sdk.verify(Path(destination))
    return {'receipt': receipt, 'verification': verification}


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('source', type=Path)
    parser.add_argument('destination', type=Path)
    parser.add_argument('--created-at', required=True, help='Actual generation time, ISO 8601 with timezone')
    parser.add_argument('--publisher', required=True)
    parser.add_argument('--system', required=True)
    parser.add_argument('--system-version', required=True)
    parser.add_argument('--identity', required=True, type=Path)
    parser.add_argument('--registry', required=True, type=Path)
    parser.add_argument('--allow-dev', action='store_true')
    args = parser.parse_args()
    if not args.allow_dev:
        parser.error('This is a development example; pass --allow-dev. For production use the production guide.')
    identity = SigningIdentity.from_directory(args.identity, allow_dev=True)
    if not identity.development:
        parser.error('This example expects a development identity.')
    with SDK(marker=LazyWatermarker(threads=2), identity=identity,
             registry=Registry(args.registry), trust_anchors=args.identity / 'trust.pem') as sdk:
        result = export_image(sdk, source=args.source, destination=args.destination,
            publisher=args.publisher, system=args.system, version=args.system_version,
            created_at=datetime.fromisoformat(args.created_at.replace('Z', '+00:00')))
    print(json.dumps(result, indent=2))


if __name__ == '__main__':
    main()
