# ruff: noqa: F821
from __future__ import annotations

import hashlib
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from router import Event

FIELDS = {"file": {"type": "file", "label": {"ru": "Файл", "en": "File"}, "required": True}}

class Module:
    pages = [{"id": "main", "title": {"ru": "Файлы", "en": "Files"}, "elements": [{"id": "inspect", "type": "form", "action": "inspect", "label": {"ru": "Проверить файл", "en": "Inspect file"}}]}]

    @loader.action(fields=FIELDS, access="owner")
    @loader.function(fields=FIELDS)
    async def inspect(self, ctx: Event) -> dict:
        file = await app.files(ctx.values["file"]).load()
        checksum = hashlib.sha256()
        size, preview = 0, bytearray()
        async for chunk in file.chunks():
            checksum.update(chunk)
            size += len(chunk)
            if len(preview) < 4096: preview.extend(chunk[:4096 - len(preview)])
        return {"filename": file.data["filename"], "bytes": size, "sha256": checksum.hexdigest(),
                "preview": bytes(preview).decode("utf-8", errors="replace")}
