# Copyright 2023 Canonical Ltd.
# Licensed under the Apache V2, see LICENCE file for details.

import asyncio
import sys

from juju.controller import Controller


async def main(cloud_name, credential_name):
    controller = Controller()
    model = None
    print("Connecting to controller")
    # connect to current controller with current user, per Juju CLI
    await controller.connect()
    try:
        print("Adding model")
        model = await controller.add_model(
            "test", cloud_name=cloud_name, credential_name=credential_name
        )

        # verify credential
        print(f"Verify model's credential: {model.info.cloud_credential_tag}")

        # verify we can deploy
        print("Deploying ubuntu")
        app = await model.deploy("ch:ubuntu")

        print("Waiting for active")
        await model.block_until(
            lambda: app.units
            and all(unit.workload_status == "active" for unit in app.units)
        )

        print("Removing ubuntu")
        await app.remove()
    finally:
        print("Cleaning up")
        if model:
            print("Removing model")
            model_uuid = model.info.uuid
            await model.disconnect()
            await controller.destroy_model(model_uuid)
        print("Disconnecting")
        await controller.disconnect()


if __name__ == "__main__":
    assert len(sys.argv) > 2, "Please provide a cloud and credential name"
    asyncio.run(main(sys.argv[1], sys.argv[2]))
