"""Remote vehicle services for Subaru integration."""
import logging

from subarulink.exceptions import SubaruException

from homeassistant.exceptions import HomeAssistantError

from .const import SERVICE_UNLOCK, VEHICLE_NAME, VEHICLE_VIN

_LOGGER = logging.getLogger(__name__)


async def async_call_remote_service(controller, cmd, vehicle_info, arg=None):
    """Execute subarulink remote command."""
    car_name = vehicle_info[VEHICLE_NAME]
    vin = vehicle_info[VEHICLE_VIN]

    _LOGGER.debug("Sending %s command command to %s", cmd, car_name)
    success = False
    err_msg = ""
    try:
        if cmd == SERVICE_UNLOCK:
            success = await getattr(controller, cmd)(vin, arg)
        else:
            success = await getattr(controller, cmd)(vin)
    except SubaruException as err:
        err_msg = err.message

    if success:
        _LOGGER.debug("%s command successfully completed for %s", cmd, car_name)
        return

    raise HomeAssistantError(f"Service {cmd} failed for {car_name}: {err_msg}")