"""Desktop foreign-history browsing, scoped to the serving backend and profile."""

from .method_ctx import HandlerRegistry, bind_module

_registry = HandlerRegistry()
method = _registry.method


@method("session.foreign.list")
def _foreign_list(rid, params):
    from hermes_cli.foreign_sessions_browser import list_foreign_sessions
    try:
        return _ok(rid, list_foreign_sessions(params.get("source"), params.get("offset", 0), params.get("limit", 25)))
    except ValueError as exc:
        return _err(rid, -32602, str(exc))
    except OSError:
        return _err(rid, -32000, "Could not read session folders on this backend")


def _foreign_history_request(rid, params, importing):
    from hermes_cli.foreign_sessions_browser import import_browser_session, preview_foreign_session
    try:
        with _profile_db(params, writer=importing) as db:
            if db is None:
                return _db_unavailable_error(rid, code=-32000)
            result = (import_browser_session(params.get("id"), db, _response_profile_name(params.get("profile")))
                      if importing else preview_foreign_session(params.get("id"), db))
            return _ok(rid, result)
    except ValueError as exc:
        return _err(rid, -32602, str(exc))
    except OSError:
        return _err(rid, -32000, "Could not read this session on the backend")


@method("session.foreign.preview")
def _foreign_preview(rid, params):
    return _foreign_history_request(rid, params, False)


@method("session.foreign.import")
def _foreign_import(rid, params):
    return _foreign_history_request(rid, params, True)


def register(server):
    bind_module(globals(), server)
