from django.shortcuts import redirect,render
from django.contrib.auth.models import User
from django.contrib import messages
from .import views
from django.contrib.auth import authenticate, login, logout
from app.EmailBackEnd import EmailBackEnd
from app.models import Application, Subscription

from django.contrib.auth.decorators import login_required
from app.models import UserProfile



def REGISTER(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        email = request.POST.get('email')
        password = request.POST.get('password')

        # checking email
        if User.objects.filter(email = email).exists():
            messages.warning(request, 'Email already exists!')
            return redirect('register')

        # Checking username
        if User.objects.filter(username=username).exists():
            messages.warning(request, 'Username already exists!')
            return redirect('register')

        user = User(
            username = username,
            email = email,
        )
        user.set_password(password)
        user.save()
        return redirect('login')

    return render(request, 'registration/register.html')


def LOGIN(request):
    return render(request, 'registration/login.html')

def LOGIN_PAGE(request):
    if request.method == 'POST':
        email = request.POST.get('email')
        password = request.POST.get('password')

        user = EmailBackEnd.authenticate(request,
        username=email,
        password=password)

        if user != None:
            login(request, user)
            return redirect('home')
        else:
            messages.error(request, 'You have entered invalid Email/Password!')
            return redirect('login')

@login_required
def PROFILE(request):
    applications = Application.objects.filter(user=request.user).order_by('-created_at')  # Get all applications for the user
    subscription = Subscription.objects.filter(user=request.user).first()  # Get the user's subscription (if any)
    context = {
        'applications': applications,
        'subscription': subscription,
    }
    return render(request, 'registration/profile.html', context)

@login_required
def PROFILE_UPDATE(request):
    if request.method == "POST":
        print(request.POST)  # Log the form data to see if values are being sent
        username = request.POST.get('username', '').strip()
        first_name = request.POST.get('first_name', '').strip()
        last_name = request.POST.get('last_name', '').strip()
        email = request.POST.get('email', '').strip()
        password = request.POST.get('password', '').strip()
        user_id = request.user.id

        user = User.objects.get(id=user_id)

        if not username:
            messages.error(request, 'Username cannot be empty.')
            return redirect('profile')

        user.first_name = first_name
        user.last_name = last_name
        user.username = username
        user.email = email

        if password:
            user.set_password(password)
        
        user.save()
        messages.success(request, 'Profile has been successfully updated.')
        return redirect('profile')


@login_required
def PROFILE_UPDATE(request):
    if request.method == "POST":
        print(request.POST)  # Log the form data to see if values are being sent
        username = request.POST.get('username', '').strip()
        first_name = request.POST.get('first_name', '').strip()
        last_name = request.POST.get('last_name', '').strip()
        email = request.POST.get('email', '').strip()
        password = request.POST.get('password', '').strip()
        user_id = request.user.id

        user = User.objects.get(id=user_id)

        if not username:
            messages.error(request, 'Username cannot be empty.')
            return redirect('profile')

        user.first_name = first_name
        user.last_name = last_name
        user.username = username
        user.email = email

        if password:
            user.set_password(password)

        user.save()

        profile, created = UserProfile.objects.get_or_create(user=user)
        if request.FILES.get('avatar'):
            profile.avatar = request.FILES.get('avatar')
        profile.save()

        messages.success(request, 'Profile has been successfully updated.')
        return redirect('profile')

    return render(request, 'your_template_path/profile_update.html')
