#!/usr/bin/env python3

import os
import sys

if os.path.exists("micro/lib"):
    sys.path.insert(0, "../..")
    sys.path.insert(0, ".")

import msgpack
import importlib

import anyio
import asyncclick as click
from contextlib import asynccontextmanager

from moat.main import ABytes, NoPort, copy_over
from moat.main import get_serial, get_link, get_link_serial
from moat.ems.controller import Controller

from asyncdbus.message_bus import MessageBus
from asyncdbus.errors import DBusError
from asyncdbus.constants import NameFlag

import logging

logger = logging.getLogger(__name__)


@main.command()
@click.pass_obj
@click.option("-n", "--name", type=str, default="main", help="Name of BMS config")
async def run(obj, name):
    async with MessageBus().connect() as bus, get_link(obj) as req:
        ctrl = Controller(name, obj.cfg.bms[name], obj.cfg, req)
        await ctrl.run(req, bus)


if __name__ == "__main__":
    try:
        main(_anyio_backend="trio")
    except NoPort:
        print("No port given, socket doesn't work")
        sys.exit(1)
