"""
Room

Rooms are simple containers that has no location of their own.

"""

from evennia.objects.objects import DefaultRoom
from evennia.contrib.grid.extended_room import ExtendedRoom
from evennia.prototypes.spawner import spawn

# from .objects import LightSource
from .drinkables import TEACUP_DESCS
from .pets import Hunger
from commands.drinkables import CmdSetTrolley
from utils.word_list import routput, Token

import random

# the system error-handling module is defined in the settings. We load the
# given setting here using utils.object_from_module. This way we can use
# it regardless of if we change settings later.
from django.conf import settings

from evennia import (
    TICKER_HANDLER,
    CmdSet,
    Command,
    DefaultExit,
    DefaultRoom,
    create_object,
    default_cmds,
    search_object,
    syscmdkeys,
    utils,
)


_SEARCH_AT_RESULT = utils.object_from_module(settings.SEARCH_AT_RESULT)
from .objects import ObjectParent


class Room(ObjectParent, ExtendedRoom):
    """
    Rooms are like any Object, except their location is None
    (which is default). They also use basetype_setup() to
    add locks so they cannot be puppeted or picked up.
    (to change that, use at_object_creation instead)

    See mygame/typeclasses/objects.py for a list of
    properties and methods available on all Objects.
    """
    is_dark = False
    has_weather = False


class DabblersRoom(Room):
    teacup_prototype = {
        "typeclass": "typeclasses.drinkables.TeaCup",
        "key": "teacup",
        "desc": "A nice teacup.",
    }

    def at_object_creation(self):
        """
        called at creation
        """
        self.cmdset.add_default(CmdSetTrolley, persistent=True)

    def produce_teacup(self, caller):
        if caller.has("teacup"):
            caller.msg("You already have a teacup.")
        else:
            cuptype = self.teacup_prototype
            cuptype['desc'] = routput(random.choice(TEACUP_DESCS))

            cup = spawn(cuptype)[0]
            cup.location = caller
            caller.msg("You pick up a teacup.")

    def get_display_desc(self, looker):
        fire = self.search("fire")
        full_desc = self.db.initial_desc
        if fire.hunger() == Hunger.RAVENOUS:
            full_desc += " " + self.db.fire_out
        elif fire.hunger() == Hunger.HUNGRY:
            full_desc += " " + self.db.fire_dim
        elif fire.hunger() == Hunger.FULL:
            full_desc += " " + self.db.fire_full
        else:
            full_desc += " " + self.db.fire_on
        full_desc += " " + self.db.final_desc

        return full_desc
