"""Upload routes for handling image file uploads."""
from flask import Blueprint, request, jsonify, g
from app import limiter
from app.utils import role_required
from app.services.image_service import upload_multiple_images, MAX_PHOTOS_PER_PROPERTY
import uuid


uploads_bp = Blueprint('uploads', __name__, url_prefix='/uploads')


@uploads_bp.route('/house-images', methods=['POST'])
@limiter.limit("20 per hour")
@role_required(['owner', 'admin'])
def upload_house_images():
    """
    Upload multiple images for a house.
    
    Expects: multipart/form-data with 'images' files
    Returns: List of uploaded image URLs
    """
    if 'images' not in request.files:
        return jsonify({
            'success': False,
            'message': 'No images provided',
            'data': None
        }), 400
    
    files = request.files.getlist('images')
    
    if not files or len(files) == 0:
        return jsonify({
            'success': False,
            'message': 'No images selected',
            'data': None
        }), 400
    
    if len(files) > MAX_PHOTOS_PER_PROPERTY:
        return jsonify({
            'success': False,
            'message': f'Maximum {MAX_PHOTOS_PER_PROPERTY} images allowed per upload',
            'data': None
        }), 400
    
    temp_property_id = uuid.uuid4()
    result = upload_multiple_images(files, 'houses', temp_property_id)
    
    if result['success']:
        return jsonify({
            'success': True,
            'message': result['message'],
            'data': {
                'images': result['images'],
                'errors': result['errors']
            }
        }), 200
    else:
        return jsonify({
            'success': False,
            'message': 'Failed to upload images',
            'data': {'errors': result['errors']}
        }), 400


@uploads_bp.route('/car-images', methods=['POST'])
@limiter.limit("20 per hour")
@role_required(['owner', 'admin'])
def upload_car_images():
    """
    Upload multiple images for a car.
    
    Expects: multipart/form-data with 'images' files
    Returns: List of uploaded image URLs
    """
    if 'images' not in request.files:
        return jsonify({
            'success': False,
            'message': 'No images provided',
            'data': None
        }), 400
    
    files = request.files.getlist('images')
    
    if not files or len(files) == 0:
        return jsonify({
            'success': False,
            'message': 'No images selected',
            'data': None
        }), 400
    
    if len(files) > MAX_PHOTOS_PER_PROPERTY:
        return jsonify({
            'success': False,
            'message': f'Maximum {MAX_PHOTOS_PER_PROPERTY} images allowed per upload',
            'data': None
        }), 400
    
    temp_property_id = uuid.uuid4()
    result = upload_multiple_images(files, 'cars', temp_property_id)
    
    if result['success']:
        return jsonify({
            'success': True,
            'message': result['message'],
            'data': {
                'images': result['images'],
                'errors': result['errors']
            }
        }), 200
    else:
        return jsonify({
            'success': False,
            'message': 'Failed to upload images',
            'data': {'errors': result['errors']}
        }), 400