from orionclient.session import APISession
from orionclient.types import MolsearchQuery, MolsearchDatabase


def find_first_available_db(search_type='2D'):
    if search_type.upper() not in ['2D', '3D']:
        raise ValueError("Search type must be '2D' or '3D'")

    search_filter = {'search_type': search_type.upper()}

    db = None
    for db in APISession.list_resources(MolsearchDatabase, search_filter):
        if db.state == "LOADED":
            break

    if db is None or db.state != "LOADED":
        raise ValueError(f"No loaded {search_type} database found")

    return db


PROJECT = APISession.get_current_project().id

db = find_first_available_db()

exact_query = MolsearchQuery.create_exact_query(
    database_id=db.id,
    search_type="ISM",
    smiles="CC(C)Cc1ccc(cc1)C(C)C(=O)O",
    name="Search for ibuprofen",
    project=PROJECT,
    session=APISession,
)