import asyncio

from pydantic import BaseModel

from hatchet_sdk import Context, Hatchet


# > Define models
class TaskInput(BaseModel):
    user_id: int


class TaskOutput(BaseModel):
    ok: bool


# !!


async def main() -> None:
    hatchet = Hatchet()

    # > Create a stub task
    stub = hatchet.stubs.task(
        # make sure the name and schemas exactly match the implementation
        name="externally-triggered-task",
        input_validator=TaskInput,
        output_validator=TaskOutput,
    )
    # !!

    # > Trigger the task
    # input type checks properly
    result = await stub.aio_run(input=TaskInput(user_id=1234))

    # `result.ok` type checks properly
    print("Is successful:", result.ok)
    # !!


if __name__ == "__main__":
    asyncio.run(main())
