import os
from dotenv import load_dotenv
from .ai import gemini, claude

# Load environment variables from the directory where this file resides
base_dir = os.path.dirname(os.path.abspath(__file__))
dotenv_path = os.path.join(base_dir, ".env")
load_dotenv(dotenv_path)

def extract_label_info(image_bytes: bytes, mode: str = "item"):
    """
    Orchestrates extraction across multiple AI providers.
    Modes: 'item' (full technical extraction), 'box' (container discovery)
    """
    if mode == "box":
        prompt = """
        Identify the CONTAINER or BOX name from this image.
        Look for large, prominent, bold, or hand-written text that identifies a storage unit.
        Ignore small technical details, quantities, or fine print.
        
        Return ONLY a valid JSON object:
        {
          "box_label": "The identified container name",
          "name": "Same as box_label",
          "category": "Storage",
          "specs": "Brief description if useful",
          "quantity": 1
        }
        """
    else:
        prompt = """
        Extract technical inventory information from this label image.
        
        CRITICAL INSTRUCTIONS:
        1. Look at the most prominent text (usually top 1-2 rows). This is the product NAME and MODEL.
        2. Extract the PART NUMBER (P/N, Model No, Type). If no explicit Part Number is found, synthesize one from the most unique identifier in the header (e.g. 'OM4-MMF-DX').
        3. Separate the COLOR (e.g. Turquoise, Yellow, Black).
        4. Extract CATEGORY based on the item type (e.g. Patchcord, SFP, Connector).
        5. Extract technical SPECS (e.g. '2.0mm', '10G', '850nm').
        
        Return ONLY a valid JSON object:
        {
          "name": "Full descriptive name from header",
          "part_number": "Unique identifier for fast scanning",
          "category": "Broad category",
          "color": "Color if present",
          "specs": "Brief tech specs list",
          "barcode": "Barcode value if visible",
          "quantity": 1
        }
        """
    
    # 1. Try Gemini
    result = gemini.extract(image_bytes, prompt)
    if result:
        # Maintenance: Ensure fields are mapped if mode was box
        if mode == "box" and "box_label" in result and "name" not in result:
             result["name"] = result["box_label"]
        return result
        
    # 2. Try Claude (Fallback)
    result = claude.extract(image_bytes, prompt)
    if result:
        return result
        
    return {"error": "All AI providers failed or no API keys configured. Check your .env file."}
