from flask import Blueprint, request, jsonify
from flask_jwt_extended import jwt_required, get_jwt_identity
from extensions import db
from models import User, Paciente
from subscription import status_assinatura

pacientes_bp = Blueprint('pacientes', __name__)

def get_user():
    return User.query.filter_by(uuid=get_jwt_identity()).first()

@pacientes_bp.route('/', methods=['GET'])
@jwt_required()
def listar():
    user = get_user()
    sub = status_assinatura(user)

    pacientes_ativos = [p for p in user.pacientes if p.ativo]

    precisa_escolher = not sub['pode_usar_premium'] and len(pacientes_ativos) > 1

    return jsonify({
        'precisa_escolher_perfil': precisa_escolher,
        'assinatura': sub,
        'pacientes': [{'uuid': p.uuid, 'nome': p.nome} for p in pacientes_ativos]
    }), 200

@pacientes_bp.route('/', methods=['POST'])
@jwt_required()
def criar():
    user = get_user()
    sub = status_assinatura(user)

    pacientes_ativos = [p for p in user.pacientes if p.ativo]

    if not sub['pode_usar_premium'] and len(pacientes_ativos) >= 1:
        return jsonify({'erro': 'Plano gratuito permite apenas 1 perfil'}), 403

    data = request.get_json()
    nome = data.get('nome', '').strip()
    if not nome:
        return jsonify({'erro': 'Nome é obrigatório'}), 400

    paciente = Paciente(nome=nome, user_id=user.id, ativo=True)
    db.session.add(paciente)
    db.session.commit()
    return jsonify({'uuid': paciente.uuid, 'nome': paciente.nome}), 201

@pacientes_bp.route('/<uuid_paciente>', methods=['DELETE'])
@jwt_required()
def deletar(uuid_paciente):
    user = get_user()
    paciente = Paciente.query.filter_by(uuid=uuid_paciente, user_id=user.id).first()
    if not paciente:
        return jsonify({'erro': 'Paciente não encontrado'}), 404
    db.session.delete(paciente)
    db.session.commit()
    return jsonify({'ok': True}), 200

@pacientes_bp.route('/escolher-ativo/<uuid_paciente>', methods=['POST'])
@jwt_required()
def escolher_ativo(uuid_paciente):
    user = get_user()
    sub = status_assinatura(user)

    if sub['pode_usar_premium']:
        return jsonify({'erro': 'Você ainda não precisa escolher um perfil'}), 400

    paciente_escolhido = Paciente.query.filter_by(uuid=uuid_paciente, user_id=user.id).first()
    if not paciente_escolhido:
        return jsonify({'erro': 'Paciente não encontrado'}), 404

    for p in user.pacientes:
        p.ativo = (p.id == paciente_escolhido.id)

    db.session.commit()
    return jsonify({'ok': True, 'perfil_ativo': paciente_escolhido.nome}), 200