from app.email_identity_extraction_service import extract_email_identity


DIETIMPORT_EMAIL = """
Boa tarde,

Conseguiria enviar-me a fatura em formato digital, referente à nossa última encomenda?

Obrigado.

Com os melhores cumprimentos,

Filipe Delgado

Engenheiro Civil

Responsável
Departamento de Manutenção

Rua Dr. Costa Sacadura N.º4 1800-176 Lisboa
Telem: +351 96 873 88 56 (Chamada para Rede Móvel Nacional)
Tel: +351 21 159 01 95 (Chamada para Rede Fixa Nacional)

AVISO
Esta mensagem (incluindo quaisquer anexos) pode conter informação confidencial para uso exclusivo do destinatário. Se não for o destinatário pretendido não deverá usar, distribuir ou copiar este e-mail. Se recebeu esta mensagem por engano por favor informe o emissor e elimine-a imediatamente. As opiniões emitidas nesta mensagem não são necessariamente as da Dietimport S.A..

Obrigado.
"""


def test_regex_identity_ignores_valediction_as_person_name():
    data = extract_email_identity(
        DIETIMPORT_EMAIL,
        email="filipedelgado@dietimport.pt",
        use_llm=False,
    )
    assert data["person_name"] == "Filipe Delgado"
    assert data["person_name"] != "Com os melhores cumprimentos,"


def test_regex_identity_keeps_company_name_not_full_disclaimer():
    data = extract_email_identity(
        DIETIMPORT_EMAIL,
        email="filipedelgado@dietimport.pt",
        use_llm=False,
    )
    assert data["company_mentions"] == ["Dietimport S.A"]
    assert all("informação confidencial" not in company for company in data["company_mentions"])
    assert all(len(company) < 80 for company in data["company_mentions"])


def test_regex_identity_address_stops_before_phone_labels():
    data = extract_email_identity(
        DIETIMPORT_EMAIL,
        email="filipedelgado@dietimport.pt",
        use_llm=False,
    )
    assert data["address"] == "Rua Dr. Costa Sacadura N.º4 1800-176 Lisboa"
    assert "Telem" not in data["address"]
    assert "+351 96 873 88 56" in data["phones"]
    assert data["domain"] == "dietimport.pt"


def test_identity_cleanup_removes_legal_paragraph_mentions(monkeypatch):
    from app.email_identity_extraction_service import merge_identity

    regex_data = {
        "person_name": "",
        "company_mentions": [
            "dos nesta comunicação estão incorporados num ficheiro cujo responsável é a SOPAC, S.A",
            "obter a confirmação sobre se a SOPAC, S.A",
        ],
        "address": "",
        "phones": [],
        "websites": [],
        "email": "info@adp-fertilizantes.pt",
        "domain": "adp-fertilizantes.pt",
        "confidence": 0.9,
        "evidence": [],
        "method": "regex",
    }
    data = merge_identity(regex_data, None)
    assert data["company_mentions"] == ["SOPAC, S.A"]
    assert all("ficheiro" not in company for company in data["company_mentions"])


def test_identity_cleanup_removes_cjk_noise_from_person_name():
    from app.email_identity_extraction_service import merge_identity

    regex_data = {
        "person_name": "Luis Roch游戏副本a",
        "company_mentions": [],
        "address": "",
        "phones": [],
        "websites": [],
        "email": "luis.rocha@coimpack.pt",
        "domain": "coimpack.pt",
        "confidence": 0.85,
        "evidence": [],
        "method": "regex",
    }
    data = merge_identity(regex_data, None)
    assert data["person_name"] == "Luis Rocha"
    assert data["confidence"] <= 0.45


def test_identity_cleanup_rejects_mobile_footer_as_person_name():
    from app.email_identity_extraction_service import merge_identity

    regex_data = {
        "person_name": "Enviado do meu Galaxy",
        "company_mentions": [],
        "address": "",
        "phones": [],
        "websites": [],
        "email": "paulo.campelo@sapo.pt",
        "domain": "sapo.pt",
        "confidence": 0.7,
        "evidence": [],
        "method": "regex",
    }
    data = merge_identity(regex_data, None)
    assert data["person_name"] == ""
    assert data["confidence"] <= 0.45
