from typing import Any, Dict, List, Optional, Union
from flask import Response, jsonify, make_response


def build_response(
    data: Union[Dict[str, Any], List[Any], str, int],
    status_codes: Optional[Union[int, List[int]]] = None
) -> Response:
    status_code = 200

    # Normalize status_codes to list
    if isinstance(status_codes, int):
        status_codes = [status_codes]

    # Pick the most appropriate status code
    if status_codes:
        if 500 in status_codes:
            status_code = 500
        elif 400 in status_codes:
            status_code = 400
        elif 404 in status_codes:
            status_code = 404
        elif 422 in status_codes:
            status_code = 422
        elif 401 in status_codes:
            status_code = 401
        else:
            status_code = status_codes[0]

    # Final response structure
    if isinstance(data, dict) and 'error' in data:
        return make_response(jsonify({
            'error': data['error'],
            'details': data.get('details'),
        }), status_code)

    return make_response(jsonify({'data': data}), status_code)
