from defence360agent.rpc_tools import lookup
from defence360agent.utils import Scope
from defence360agent.contracts.config import ControlPanelConfig
from defence360agent.myimunify.advice.advice_manager import (
    get_advice_notifications,
    make_advice,
)
from defence360agent.myimunify.advice.hosting_smart_advice_api import (
    sync_advices,
)


class SmartAdviceEndpoints(lookup.RootEndpoints):
    SCOPE = Scope.IM360

    @lookup.bind("smart-advice", "notifications")
    async def smart_advice_notifications(self):
        if not ControlPanelConfig.SMART_ADVICE_ALLOWED:
            return []
        return await get_advice_notifications()

    @lookup.bind("smart-advice", "get-options")
    async def smart_advice_get_options(self):
        return {
            "mu_plugin_installation": ControlPanelConfig.SMART_ADVICE_ALLOWED,
            "advice_email_notification": ControlPanelConfig.ADVICE_EMAIL_NOTIFICATION,
        }

    @lookup.bind("smart-advice", "sync")
    async def sync_smart_advice(self):
        if not ControlPanelConfig.SMART_ADVICE_ALLOWED:
            return []
        advices = await make_advice()
        ok = await sync_advices(advices)
        if ok:
            return []
        else:
            raise Exception("Failed to sync advices")
