from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
from flask_jwt_extended import JWTManager
import os
from dotenv import load_dotenv
from pathlib import Path

# Cargar .env desde la carpeta backend
env_path = Path(__file__).parent.parent / '.env'
load_dotenv(dotenv_path=env_path)

db = SQLAlchemy()
jwt = JWTManager()

def create_app():
    app = Flask(__name__)
    
    # Configuration
    app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv(
        'DATABASE_URL', 
        'mysql+pymysql://user:password@localhost:3306/roadfy_db'
    )
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config['JWT_SECRET_KEY'] = os.getenv('SECRET_KEY', 'your-secret-key-change-this-in-production')
    app.config['JWT_ACCESS_TOKEN_EXPIRES'] = int(os.getenv('ACCESS_TOKEN_EXPIRE_MINUTES', '30')) * 60
    
    # Initialize extensions
    db.init_app(app)
    jwt.init_app(app)
    
    # CORS configuration
    cors_origins = os.getenv('CORS_ORIGINS', 'http://localhost:9002,http://localhost:3000,http://localhost:5173').split(',')
    CORS(app, origins=cors_origins, supports_credentials=True)
    
    # Register blueprints
    from app.routers.auth import auth_bp
    from app.routers.tires import tires_bp
    from app.routers.businesses import businesses_bp
    from app.routers.inventory import inventory_bp
    from app.routers.users import users_bp
    from app.routers.reviews import reviews_bp
    from app.routers.stats import stats_bp
    
    app.register_blueprint(auth_bp, url_prefix='/api/auth')
    app.register_blueprint(tires_bp, url_prefix='/api/tires')
    app.register_blueprint(businesses_bp, url_prefix='/api/businesses')
    app.register_blueprint(inventory_bp, url_prefix='/api/inventory')
    app.register_blueprint(users_bp, url_prefix='/api/users')
    app.register_blueprint(reviews_bp, url_prefix='/api/reviews')
    app.register_blueprint(stats_bp, url_prefix='/api/stats')
    
    @app.route('/')
    def root():
        from flask import jsonify
        return jsonify({
            'message': 'RoadFY API',
            'version': '1.0.0',
            'docs': '/api/docs'
        })
    
    @app.route('/health')
    def health_check():
        return {'status': 'healthy'}
    
    # Create tables (but don't fail if foreign key tables don't exist yet)
    # The normalize_database.sql script should be run first
    try:
        with app.app_context():
            db.create_all()
    except Exception as e:
        print(f"Warning: Could not create all tables: {e}")
        print("Make sure to run normalize_database.sql first to create normalized tables")
    
    return app
