from typing import *
import royalnet.commands as rc
import royalnet.utils as ru
from sqlalchemy import func

from ..tables import Diario


class DiarioshuffleCommand(rc.Command):
    name: str = "diarioshuffle"

    description: str = "Cita una riga casuale del diario."

    aliases = ["dis", "dishuffle", "dish"]

    syntax = ""

    async def run(self, args: rc.CommandArgs, data: rc.CommandData) -> None:
        DiarioT = self.alchemy.get(Diario)
        entry: List[Diario] = await ru.asyncify(
            data.session
                .query(DiarioT)
                .order_by(func.random())
                .limit(1)
                .one_or_none
        )
        if entry is None:
            raise rc.CommandError("Nessuna riga del diario trovata.")
        await data.reply(f"ℹ️ {entry}")