from flask_mysqldb import MySQL
from flask import Flask, Blueprint, jsonify, request
from .auth import token_required
import os
import traceback
import MySQLdb

imagem = Blueprint('imagem', __name__)  
mysql = MySQL()

CAMINHO_PERFIL = "/var/www/Backend/itguys/ambiente_python/repositorio_img/perfil/"
CAMINHO_FUNDOS = "/var/www/Backend/itguys/ambiente_python/repositorio_img/fundos/"

def salvar_imagem(arquivo, tipo_imagem, nome_usuario):
    """Salva a imagem no diretório correspondente e retorna o caminho relativo"""
    nome_arquivo = f"{nome_usuario}.jpg"
    
    if tipo_imagem == "perfil":
        caminho_diretorio = CAMINHO_PERFIL
        caminho_relativo = f"perfil/{nome_arquivo}"
    else:
        caminho_diretorio = CAMINHO_FUNDOS
        caminho_relativo = f"fundos/{nome_arquivo}"

    caminho_completo = os.path.join(caminho_diretorio, nome_arquivo)

    # Garante que o diretório existe
    os.makedirs(caminho_diretorio, exist_ok=True)

    # Salva a imagem
    arquivo.save(caminho_completo)

    return caminho_relativo  # Retorna o caminho relativo para o banco de dados

def get_db_connection():
    """Verifica e retorna uma conexão válida com o banco de dados"""
    try:
        conn = mysql.connection
        conn.ping()  # Verifica se a conexão está ativa
        return conn
    except MySQLdb.OperationalError:
        return mysql.connection  # Tenta criar uma nova conexão

@imagem.route('/imagem', methods=['POST'])  
@token_required
def receber_imagem(data):
    try:
        nome_usuario = data.get('user', '') # Separa o usuário do dominío 
        if not nome_usuario:
            return jsonify({"status": "error", "message": "Usuário não autenticado!"}), 405

        nome_usuario = nome_usuario.split('@')[0]
        

        imagem_perfil = request.files.get('perfil')
        imagem_foto_fundo = request.files.get('foto_fundo')

        # Verifica se as imagens foram enviadas corretamente
        if not imagem_perfil or not imagem_foto_fundo:
            return jsonify({"status": "error", "message": "Imagens não enviadas corretamente!"}), 400

        # Salva as imagens e obtém os caminhos relativos
        caminho_perfil = salvar_imagem(imagem_perfil, "perfil", nome_usuario)
        caminho_foto_fundo = salvar_imagem(imagem_foto_fundo, "fundo", nome_usuario)

        # Conecta-se ao banco e executa a query de atualização
        conn = get_db_connection()
        cursor = conn.cursor()

        query = """
            UPDATE usuarios 
            SET img_perfil = %s, img_fundo = %s
            WHERE usuario = %s
        """
        valores = (caminho_perfil, caminho_foto_fundo, nome_usuario)

        cursor.execute(query, valores)
        conn.commit()
        cursor.close()

        return jsonify({"status": "success", "message": "Imagens enviadas e salvas com sucesso!"}), 200

    except MySQLdb.OperationalError as e:
        return jsonify({"status": "error", "message": f"Erro de conexão com o banco de dados: {str(e)}"}), 500
    except Exception as e:
        traceback.print_exc() 
        return jsonify({"status": "error", "message": str(e)}), 500

