from app.reply_intent_gate import classify_reply_intent
from app.reply_safety_validator import validate_generated_reply


def test_bounce_is_internal_not_sales():
    intent = classify_reply_intent(
        {"customer_email": "mailer-daemon@example.com", "action_code": "SEND_INFO"},
        "Delivery has failed: Address not found",
    )
    assert intent.category == "BOUNCE_EMAIL"
    assert intent.template_code == "INTERNAL_BOUNCE_EMAIL"
    assert intent.commercial_reply_allowed is False


def test_unsubscribe_is_not_sales():
    intent = classify_reply_intent({}, "Cancelar e-mail. Não pedimos qualquer contacto e estão em incumprimento RGPD.")
    assert intent.category == "UNSUBSCRIBE_REQUEST"
    assert intent.template_code == "ACK_UNSUBSCRIBE"
    assert intent.commercial_reply_allowed is False


def test_support_incident_is_not_equipment_list():
    intent = classify_reply_intent({"route": "suporte"}, "O carregador está avariado e a contactora não atraca.")
    assert intent.category == "SUPPORT_INCIDENT"
    assert intent.template_code == "ACK_SUPPORT_RECEIVED"
    assert intent.commercial_reply_allowed is False


def test_varisom_installation_clarification():
    intent = classify_reply_intent({"action_code": "SEND_QUOTE"}, "Presumo que o valor é sem instalação, pode por favor confirmar?")
    assert intent.category == "COMMERCIAL_CLARIFICATION"
    assert intent.template_code == "CLARIFY_INSTALLATION_SCOPE"
    assert intent.commercial_reply_allowed is True


def test_installation_validator_allows_approved_negative_wording():
    body = (
        "Sim, confirmo que o valor indicado é referente ao equipamento, sem instalação incluída.\n\n"
        "A BLIF não presta serviço direto de instalação, mas o equipamento pode ser instalado por qualquer eletricista qualificado."
    )
    result = validate_generated_reply(body)
    assert result["blockers"] == []


def test_installation_validator_blocks_positive_installation_promise():
    body = "A instalação está incluída e a BLIF trata da instalação."
    result = validate_generated_reply(body)
    assert result["blockers"]
