import time
import pymysql
from flask import Flask, jsonify
from flask_sqlalchemy import SQLAlchemy
import redis
import json

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://myuser:mypassword@mysql:3306/mydb'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

MYSQL_HOST = "mysql"
MYSQL_PORT = 3306
MYSQL_USER = "myuser"
MYSQL_PASSWORD = "mypassword"
MYSQL_DB = "mydb"

# Connexion Redis
redis_client = redis.Redis(host='redis', port=6379, decode_responses=True)

while True:
    try:
        conn = pymysql.connect(
            host=MYSQL_HOST,
            port=MYSQL_PORT,
            user=MYSQL_USER,
            password=MYSQL_PASSWORD,
            database=MYSQL_DB
        )
        conn.close()
        print("MySQL is up - continuing.")
        break
    except pymysql.err.OperationalError as e:
        print("Waiting for MySQL...", e)
        time.sleep(2)

class Artiste(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    nom = db.Column(db.String(100), nullable=False)

class Galerie(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    nom = db.Column(db.String(100), nullable=False)

class Oeuvre(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    titre = db.Column(db.String(200), nullable=False)
    exposee = db.Column(db.Boolean, default=False)

@app.route("/", methods=["GET"])
def index():
    return "Public API", 200

@app.route("/artistes", methods=["GET"])
def get_artistes():
    artistes = Artiste.query.all()
    return jsonify([{"id": a.id, "nom": a.nom} for a in artistes]), 200

@app.route("/galeries", methods=["GET"])
def get_galeries():
    galeries = Galerie.query.all()
    return jsonify([{"id": g.id, "nom": g.nom} for g in galeries]), 200

@app.route("/oeuvres", methods=["GET"])
def get_oeuvres():
    oeuvres = Oeuvre.query.filter_by(exposee=True).all()
    return jsonify([{"id": o.id, "titre": o.titre} for o in oeuvres]), 200


if __name__ == "__main__":
    with app.app_context():
        db.create_all()
    app.run(host='0.0.0.0',port=5001, debug=True)

