from flask import Flask, jsonify, request, json
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

# --- Tải dữ liệu JSON ---
def load_data():
    try:
        with open('data/presets.json', 'r', encoding='utf-8') as f:
            raw_presets_data = json.load(f)
            presets_data = raw_presets_data.get("PRESETS", [])

        with open('data/progressions.json', 'r', encoding='utf-8') as f:
            raw_progressions_data = json.load(f)
            progressions_data = raw_progressions_data.get("PROGRESSIONS", {})

        print("✅ Tải dữ liệu thành công!")
        return presets_data, progressions_data

    except FileNotFoundError as e:
        print(f"❌ Lỗi: Không tìm thấy tệp dữ liệu - {e}")
        return [], {}
    except json.JSONDecodeError as e:
        print(f"❌ Lỗi: Tệp JSON không hợp lệ - {e}")
        return [], {}

# Dữ liệu toàn cục
presets_list, progressions_list = load_data()

# --- API: GET tất cả presets ---
@app.route('/api/presets', methods=['GET'])
def get_presets():
    preset_type = request.args.get('type')
    preset_id = request.args.get('id')
    filtered_presets = presets_list

    if preset_type:
        filtered_presets = [
            p for p in filtered_presets if p.get('type', '').lower() == preset_type.lower()
        ]
    if preset_id:
        filtered_presets = [
            p for p in filtered_presets if preset_id.lower() in p.get('id', '').lower()
        ]

    preset_dict = {p["id"]: p for p in filtered_presets if "id" in p}
    return jsonify({"PRESETS": preset_dict})

# --- API: GET 1 preset theo ID ---
@app.route('/api/presets/<preset_id>', methods=['GET'])
def get_single_preset(preset_id):
    for p in presets_list:
        if p.get("id") == preset_id:
            return jsonify({"PRESETS": {preset_id: p}})
    # Cách an toàn hơn để frontend không crash
    return jsonify({"PRESETS": {}})

# --- API: GET tất cả progressions ---
@app.route('/api/progressions', methods=['GET'])
def get_progressions():
    return jsonify({"PROGRESSIONS": progressions_list})

# --- API: GET 1 progression theo genre/index ---
@app.route('/api/progressions/<genre>/<int:index>', methods=['GET'])
def get_single_progression(genre, index):
    genre_list = progressions_list.get(genre, [])
    if 0 <= index < len(genre_list):
        return jsonify({"PROGRESSIONS": {genre: [genre_list[index]]}})
    return jsonify({"error": "Progression not found"}), 404

# --- Chạy ứng dụng ---
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5050)
