"""
FuelTrack - Food Analysis Module
Integrates with LogMeal API for food recognition and calorie estimation
"""

import os
import requests
import json

# Configuration
LOGMEAL_API_KEY = os.environ.get('LOGMEAL_API_KEY', '')
LOGMEAL_API_URL = 'https://api.logmeal.com/v2'

def recognize_food_from_image(image_path_or_url):
    """
    Send image to LogMeal API and get food recognition + nutrition
    """
    if not LOGMEAL_API_KEY:
        return {'error': 'API key not configured. Get a free key from https://logmeal.com/api/'}
    
    # Step 1: Food Recognition
    try:
        # Try with file upload first
        with open(image_path_or_url, 'rb') as image_file:
            files = {'image': image_file}
            headers = {'Api-Key': LOGMEAL_API_KEY}
            response = requests.post(
                f'{LOGMEAL_API_URL}/image/recognition',
                files=files,
                headers=headers,
                timeout=30
            )
    except FileNotFoundError:
        # Try as URL
        data = {'image_url': image_path_or_url}
        headers = {'Api-Key': LOGMEAL_API_KEY}
        response = requests.post(
            f'{LOGMEAL_API_URL}/image/recognition',
            data=data,
            headers=headers,
            timeout=30
        )
    
    if response.status_code != 200:
        return {'error': f'API error: {response.status_code}', 'details': response.text}
    
    recognition_data = response.json()
    recognition_id = recognition_data.get('recognitionId') or recognition_data.get('id')
    
    if not recognition_id:
        return {'error': 'No recognition ID returned', 'raw': recognition_data}
    
    # Step 2: Get Nutrition Info
    headers = {'Api-Key': LOGMEAL_API_KEY}
    nutrition_response = requests.get(
        f'{LOGMEAL_API_URL}/nutrition/{recognition_id}',
        headers=headers,
        timeout=30
    )
    
    if nutrition_response.status_code != 200:
        return {'error': f'Nutrition API error: {nutrition_response.status_code}'}
    
    nutrition_data = nutrition_response.json()
    return parse_nutrition_response(nutrition_data)


def parse_nutrition_response(data):
    """Parse LogMeal response into simplified format"""
    try:
        # Navigate the response structure
        nutrients = data.get('nutrients', {})
        
        # Get total nutrition
        total = nutrients.get('total', {})
        
        result = {
            'calories': round(total.get('calories', 0)),
            'protein_g': round(total.get('proteins', 0), 1),
            'carbs_g': round(total.get('carbs', 0), 1),
            'fat_g': round(total.get('fats', 0), 1),
            'fiber_g': round(total.get('fiber', 0), 1)
        }
        
        # Add detected food items
        items = data.get('menu', [])
        if items:
            result['items'] = []
            for item in items[:5]:  # Top 5 items
                item_nutrition = item.get('nutrients', {})
                result['items'].append({
                    'name': item.get('name', 'Unknown'),
                    'calories': round(item_nutrition.get('calories', 0))
                })
        
        return result
        
    except Exception as e:
        return {'error': str(e), 'raw_data': data}


def format_nutrition_response(nutrition):
    """Format nutrition data for Slack display"""
    if 'error' in nutrition:
        return f"⚠️ Error: {nutrition['error']}"
    
    response = f"🍽️ **Food Analysis**\n"
    response += f"━━━━━━━━━━━━━━━━━━━━━\n"
    response += f"🔥 Calories: **{nutrition['calories']}**\n"
    response += f"🥩 Protein:  **{nutrition['protein_g']}g**\n"
    response += f"🍞 Carbs:    **{nutrition['carbs_g']}g**\n"
    response += f"🥑 Fat:      **{nutrition['fat_g']}g**\n"
    response += f"🌾 Fiber:    **{nutrition['fiber_g']}g**"
    
    # Add items if available
    if 'items' in nutrition and nutrition['items']:
        response += f"\n\n**Detected items:**"
        for item in nutrition['items']:
            response += f"\n• {item['name']} ({item['calories']} cal)"
    
    return response


if __name__ == "__main__":
    # Quick test
    print("Food Analyzer Module Ready")
    print("To use: Set LOGMEAL_API_KEY environment variable")
    print("Then call: recognize_food_from_image('path/to/photo.jpg')")