# ruff: noqa: F821

from __future__ import annotations

import hashlib
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from app import App
    from loader import loader
    from router import Event

    app: App

TEXT = {"text": {"type": "string", "min": 1, "max": 800, "required": True}}

class Module:
    @loader.function(fields=TEXT)
    async def digest(self, ctx: Event) -> dict[str, str | int]:
        raw = ctx.values["text"].encode("utf-8")
        return {"sha256": hashlib.sha256(raw).hexdigest(), "bytes": len(raw)}

    @loader.function
    async def last(self, ctx: Event) -> str | None: return await app.db.get("received")

    @loader.signal(fields=TEXT)
    async def received(self, ctx: Event) -> None:
        await app.db.set("received", ctx.values["text"])
