from chembl_webresource_client.new_client import new_client
import pandas as pd

def get_bioactivity_data(protein_id):
    activities = new_client.activity.filter(target_chembl_id=protein_id)
    bioactivities = [a for a in activities if a.get('standard_type') in ['IC50', 'EC50', 'Ki', 'Kd']]
    if not bioactivities:
        return None
    df = pd.DataFrame(bioactivities)
    df = df.dropna(subset=['standard_value', 'canonical_smiles'])
    def is_number(val):
        try:
            float(val)
            return True
        except:
            return False

    df = df[df['standard_value'].apply(is_number)].copy()
    df['standard_value'] = df['standard_value'].astype(float).clip(upper=1e8)
    df = df.drop_duplicates(subset=['canonical_smiles']).reset_index(drop=True)

    def classify(val):
        if val <= 1000:
            return "active"
        elif val >= 10000:
            return "inactive"
        else:
            return "intermediate"

    df['bioactivity_class'] = df['standard_value'].apply(classify)
    return df[['molecule_chembl_id', 'canonical_smiles', 'bioactivity_class']].reset_index(drop=True)

