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()

graphsim_query = MolsearchQuery.create_graphsim_query(
    database_id=db.id,
    smiles="CC(C)Cc1cc(cnc1)C(=O)O",
    fingerprint_type="circularvs",
    max_hits=100,
    similarity_measure_type="tanimoto",
    name="my query 3",
    project=PROJECT,
    cutoff=0,
    session=APISession,
)