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:
            progressions_data = json.load(f)

        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 [], []

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}})
    return jsonify({"error": "Preset not found"}), 404

# --- API: GET tất cả progressions ---
@app.route('/api/progressions', methods=['GET'])
def get_progressions():
    genre = request.args.get('genre')
    if genre:
        filtered = [p for p in progressions_list if p.get("genre") == genre]
    else:
        filtered = progressions_list
    return jsonify(filtered)

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

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