def calculate_ctr_score(ctr):

    if ctr >= 1.5:
        return 30

    elif ctr >= 0.8:
        return 20

    elif ctr >= 0.3:
        return 10

    return 5


def calculate_pacing_score(impressions):

    if impressions >= 500000:
        return 20

    elif impressions >= 100000:
        return 15

    return 8


def calculate_conversion_score(conversions):

    if conversions >= 100:
        return 15

    elif conversions >= 20:
        return 10

    return 5


def calculate_spend_efficiency(spend, revenue):

    if spend == 0:
        return 0

    roas = revenue / spend

    if roas >= 3:
        return 20

    elif roas >= 1.5:
        return 15

    return 5


def calculate_health_score(data):

    ctr_score = calculate_ctr_score(data["ctr"])

    pacing_score = calculate_pacing_score(
        data["impressions"]
    )

    conversion_score = calculate_conversion_score(
        data["conversions"]
    )
    
    spend_score = calculate_spend_efficiency(
        data["spend"],
        data["revenue"]
    )
   
    total_score = (
        ctr_score +
        pacing_score +
        conversion_score +
        spend_score
    )

    return {
        "health_score": total_score,
        "breakdown": {
            "ctr_score": ctr_score,
            "pacing_score": pacing_score,
            "conversion_score": conversion_score,
            "spend_score": spend_score
        }
    }