#!/usr/bin/env python3
from __future__ import annotations
import json
import re
from typing import Dict, Optional

JOB_BOARD_HINTS = {
    'theladders.com': 'Ladders',
    'my.theladders.com': 'Ladders',
    'linkedin.com': 'LinkedIn',
    'michaelpage.com': 'Michael Page',
    'cybercoders.com': 'CyberCoders',
    'jobs2web.com': 'Jobs2Web',
}


def clean(text: str) -> str:
    return (text or '').replace('\\>', '>').replace('\r', '').strip()


def detect_job_board(email_text: str, subject: str = '') -> Optional[str]:
    t = (email_text or '') + '\n' + (subject or '')
    low = t.lower()
    for domain, label in JOB_BOARD_HINTS.items():
        if domain in low:
            return label
    if 'ladders' in low:
        return 'Ladders'
    return None


def email_exposes_real_employer(email_text: str, extracted_company: str = '') -> bool:
    if extracted_company and extracted_company.strip() and extracted_company.lower().strip() not in {'ladders', 'linkedin', 'michael page', 'cybercoders', 'jobs2web'}:
        return True
    text = clean(email_text)
    # crude signal: "at <Company>" where company is not the board label
    m = re.search(r'\bat\s+([A-Z][A-Za-z0-9&.,\- ]{2,60})', text)
    if not m:
        return False
    cand = m.group(1).strip().lower()
    if cand in {'ladders', 'linkedin', 'michael page', 'cybercoders'}:
        return False
    return True


def extract_urls(email_text: str) -> list[str]:
    return re.findall(r'https?://[^\s)]+', email_text or '')


def resolution_plan(email_text: str, subject: str = '', extracted_company: str = '', role_title: str = '') -> Dict[str, object]:
    board = detect_job_board(email_text, subject)
    urls = extract_urls(email_text)
    exposed = email_exposes_real_employer(email_text, extracted_company)
    if exposed:
        return {
            'requires_lookup': False,
            'reason': 'Employer appears to be directly exposed in the email body or extracted company field.',
            'job_board': board,
            'lookup_method': None,
            'candidate_urls': urls,
        }
    method = 'follow_job_url_redirect'
    if not urls:
        method = 'search_by_role_title_and_source'
    return {
        'requires_lookup': True,
        'reason': 'Email body does not expose a reliable underlying employer; board/source label is insufficient for scoring and Template A drafting.',
        'job_board': board,
        'lookup_method': method,
        'candidate_urls': urls,
        'role_title_hint': role_title or None,
    }


if __name__ == '__main__':
    sample = """From: Ladders <jobs@my.theladders.com>\nSubject: New Jobs Based on Your Title – Director of Operations\nOperations Director\nOntario, CA / $160K - $190K\nDirector of Operations\nIrvine, CA / $150K\n"""
    print(json.dumps(resolution_plan(sample, subject='Fwd: New Jobs Based on Your Title – Director of Operations', extracted_company='Ladders', role_title='Director of Operations'), indent=2))
