import logging
import requests

from enterprise_ai.core.service_config import build_url, resolve_service_url, resolve_timeout

logger = logging.getLogger(__name__)

TIMEOUT = 120


def call_extractor(capability_code: str, input_data: dict, file=None, prompt_template=None, model_config=None):

    if file is None:
        raise Exception("File is required for Extractor")

    # EXTRACTOR_AGENT is the historical name; EXTRACTOR_AGENT_URL is accepted
    # too, since every sibling variable carries the _URL suffix.
    base = resolve_service_url("EXTRACTOR_AGENT", "EXTRACTOR_AGENT_URL", agent="extractor")
    url = build_url(base, "/gbaiapi/ice_upload")

    file.file.seek(0)
    file_bytes = file.file.read()

    files = {
        "files": (file.filename, file_bytes, file.content_type)
    }

    # 🔥 CONFIG INJECTION (as form data)
    data = {
        "prompt": prompt_template,
        "model": model_config.get("model") if model_config else None
    }

    response = requests.post(
        url,
        files=files,
        data=data,
        timeout=resolve_timeout("EXTRACTOR_AGENT_TIMEOUT", TIMEOUT),
    )

    if not response.ok:
        logger.error("Extractor service error %d: %s", response.status_code, response.text)

    response.raise_for_status()
    return response.json()


def handle_request(capability_code, input_data, file=None, prompt_template=None, model_config=None):
    return call_extractor(capability_code, input_data, file, prompt_template, model_config)
