import requests
from flask import Flask, jsonify, request
import uuid

app = Flask(__name__)

services = {}

@app.route('/', methods=['GET'])
def get_services():
    return jsonify(list(services.values()))

@app.route('/<uuid:service_uuid>', methods=['GET'])
def get_service(service_uuid):
    if str(service_uuid) in services:
        service = services[str(service_uuid)].copy()
        tariffs_list = []
        try:
            response = requests.get(f'http://tariff:5001/with-service/{service_uuid}')
            tariffs_list = response.json()
        except requests.exceptions.RequestException:
            pass

        service['tariffs'] = tariffs_list
        return jsonify(service)

    return jsonify({'message': 'Service not found'}), 404

@app.route('/', methods=['POST'])
def create_service():
    data = request.get_json()
    if not data or 'name' not in data or 'description' not in data:
        return jsonify({'message': 'Invalid data. Name and description are required'}), 400

    service_uuid = str(uuid.uuid4())
    services[service_uuid] = {'uuid': service_uuid, 'name': data['name'], 'description': data['description']}

    return jsonify(services[service_uuid]), 201


@app.route('/<uuid:service_uuid>', methods=['PUT'])
def update_service(service_uuid):
    if str(service_uuid) not in services:
        return jsonify({'message': 'Service not found'}), 404
    
    data = request.get_json()
    if not data or 'name' not in data or 'description' not in data:
        return jsonify({'message': 'Invalid data'}), 400
    
    services[str(service_uuid)]['name'] = data['name']
    services[str(service_uuid)]['description'] = data['description']

    return jsonify(services[str(service_uuid)]), 200


@app.route('/<uuid:service_uuid>', methods=['DELETE'])
def delete_service(service_uuid):
    if str(service_uuid) in services:
        del services[str(service_uuid)]
        return jsonify({'message': 'Service deleted'}), 200
    
    return jsonify({'message': 'Service not found'}), 404


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)