from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render

from accounts.models import User


@login_required
def profile(request):
    user = request.user
    if request.method == "POST":
        action = request.POST.get("action")
        if action == "update_profile":
            user.name = (request.POST.get("name") or user.name).strip()
            user.institution = request.POST.get("institution", "")
            new_username = (request.POST.get("username") or "").strip().lower()
            if new_username and new_username != user.username:
                if User.objects.filter(username=new_username).exclude(pk=user.pk).exists():
                    messages.error(request, "Nome de usuário já em uso.")
                else:
                    user.username = new_username
            user.save()
            messages.success(request, "Perfil atualizado.")
        elif action == "change_password":
            current_pw = request.POST.get("current_password", "")
            new_pw = request.POST.get("new_password", "")
            confirm = request.POST.get("new_password_confirm", "")
            if not user.check_password(current_pw):
                messages.error(request, "Senha atual incorreta.")
            elif len(new_pw) < 8:
                messages.warning(request, "A nova senha deve ter pelo menos 8 caracteres.")
            elif new_pw != confirm:
                messages.error(request, "As senhas não coincidem.")
            else:
                user.set_password(new_pw)
                user.save()
                messages.success(request, "Senha alterada com sucesso.")
        return redirect("accounts:profile")
    return render(request, "auth/profile.html", {"user": user})
