from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.db import connection
from django.contrib.auth.models import Group
from .models import CustomUser, Client
from .forms import CustomUserForm
from login.views import group_required
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth import get_user_model
from django.utils.timezone import now, timedelta

@login_required
@group_required('Desenvolvedores')  # Garantindo que apenas Desenvolvedores possam acessar
def register_user(request):
    if request.method == "POST":
        form = CustomUserForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)

            # Define a senha usando a função `set_password`
            user.set_password(form.cleaned_data['password'])

            # Obtém o tenant (schema) do formulário e associa ao usuário
            try:
                tenant = Client.objects.get(schema_name=form.cleaned_data['schema_name'])
                user.tenant = tenant
            except Client.DoesNotExist:
                messages.error(request, "Tenant (schema) especificado não encontrado.")
                return render(request, "users/register_user.html", {"form": form})

            # **Define o usuário como trial automaticamente**
            user.on_trial = True
            user.trial_expiration = form.cleaned_data['trial_expiration']

            # Salva o usuário no banco de dados
            user.save()

            # Associar o usuário ao grupo especificado
            group = Group.objects.get(name='Comum')  # Ajuste se o grupo for diferente
            user.groups.add(group)

            # Define o schema no contexto do banco para o tenant correto
            connection.set_schema(tenant.schema_name)

            messages.success(request, f"Usuário cadastrado com sucesso! Acesso de teste válido até {user.trial_expiration}.")
            return redirect("/users/home/")  # Ajuste a URL conforme necessário
        else:
            messages.error(request, "Erro ao cadastrar o usuário. Verifique os dados.")
    else:
        form = CustomUserForm()

    return render(request, "users/register_user.html", {"form": form})





@login_required
@group_required('Desenvolvedores')
def edit_user(request, user_id):
    CustomUser = get_user_model()
    user = get_object_or_404(CustomUser, id=user_id)

    if request.method == 'POST':
        form = CustomUserForm(request.POST, instance=user)
        if form.is_valid():
            updated_user = form.save(commit=False)

            # Atualiza a senha somente se for fornecida
            password = form.cleaned_data.get('password')
            if password:
                updated_user.set_password(password)
            updated_user.save()

            messages.success(request, f'Usuário {updated_user.username} atualizado com sucesso!')
            return redirect('usuarios_tenants_schema')
        else:
            messages.error(request, "Erro ao atualizar usuário. Verifique os dados.")
    else:
        form = CustomUserForm(instance=user)

    return render(request, 'users/edit_user.html', {'form': form, 'user': user})
