from typing import Optional, NoReturn, Union

from discord import Attachment
from tuxbot.cogs.Crypto.functions.parser import data_parser


async def extract(
    attachments: list[Optional[Attachment]], data: Optional[str], max_size: int
) -> dict:
    if not data and len(attachments) == 0:
        raise ValueError

    kwargs = data_parser(data)

    if attachments and attachments[0]:
        file: Attachment = attachments[0]
        if file.size > max_size:
            raise ValueError

        kwargs["message"] = await file.read()

    params = {
        "compressed": "compressed" in kwargs.keys(),
        "graphical": "graphical" in kwargs.keys(),
        "chars": kwargs["chars"] if "chars" in kwargs.keys() else (".", ","),
    }

    return {"message": kwargs["message"], "params": params}