from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.models import User, Group
from django.shortcuts import render
from django.contrib.auth.models import User
# Create your views here.
from .models import Profile
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
from .forms import UserUpdateForm, ProfileUpdateForm
from django.contrib import messages
from django.contrib.auth.decorators import login_required, permission_required
from django.urls import reverse_lazy
from .models import Profile
from .forms import (
    UserUpdateForm,
    ProfileUpdateForm,
    CustomUserCreationForm,
    CustomUserChangeForm,
    GroupForm,
)
from inventory.views import generic_list_view, generic_form_view, generic_delete_view
@login_required
def profile_view(request):
    if not hasattr(request.user, 'profile'):
        Profile.objects.create(user=request.user)

    if request.method == 'POST':
        user_form = UserUpdateForm(request.POST, instance=request.user)
        profile_form = ProfileUpdateForm(request.POST, request.FILES, instance=request.user.profile)
        if user_form.is_valid() and profile_form.is_valid():
            user_form.save()
            profile_form.save()
            messages.success(request, "Profile updated successfully.")
            return redirect('inventory:admin_page')
    else:
        user_form = UserUpdateForm(instance=request.user)
        profile_form = ProfileUpdateForm(instance=request.user.profile)

    return render(request, 'home/profile.html', {
        'user_form': user_form,
        'profile_form': profile_form,
    })

def custom_login(request):
    if request.user.is_authenticated:
        return redirect('inventory:admin_page')  # Already logged in

    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = authenticate(request, username=username, password=password)

        if user:
            login(request, user)
            return redirect('inventory:admin_page')
        else:
            messages.error(request, 'Invalid username or password.')

    return render(request, 'home/login.html')

@login_required
def custom_logout(request):
    logout(request)
    return redirect('home:custom_login')


def user_count_view(request):
    user_count = User.objects.count()
    context = {'user_count': user_count}
    return render(request, 'home.html', context)
# Create your views here.


def home(request):
    user_count = User.objects.count()
    context = {'user_count': user_count}
    return render(request, 'home/home.html', context)





@login_required
@permission_required('auth.view_user', raise_exception=True)
def user_list(request):
    return generic_list_view(
        request,
        model=User,
        template_name='home/user_list.html',
        context_name='users',
        search_fields=['username', 'first_name', 'last_name', 'email'],
        permission='auth.view_user',
        items_per_page=100000,
    )


@login_required
@permission_required('auth.add_user', raise_exception=True)
def user_create(request):
    return generic_form_view(
        request,
        model=User,
        form_class=CustomUserCreationForm,
        template_name='home/user_form.html',
        success_url=reverse_lazy('home:user_list'),
        title='Add User',
    )


@login_required
@permission_required('auth.change_user', raise_exception=True)
def user_update(request, pk):
    return generic_form_view(
        request,
        model=User,
        form_class=CustomUserChangeForm,
        template_name='home/user_form.html',
        success_url=reverse_lazy('home:user_list'),
        title='Edit User',
        object_instance=get_object_or_404(User, pk=pk),
    )


@login_required
@permission_required('auth.delete_user', raise_exception=True)
def user_delete(request, pk):
    return generic_delete_view(
        request,
        model=User,
        pk=pk,
        success_url=reverse_lazy('home:user_list'),
        template_name='admin_pages/confirm_delete.html',
        context_name='user',
        object_name_field='username',
    )


@login_required
@permission_required('auth.view_group', raise_exception=True)
def group_list(request):
    return generic_list_view(
        request,
        model=Group,
        template_name='home/group_list.html',
        context_name='groups',
        search_fields=['name'],
        permission='auth.view_group',
        items_per_page=100000,
    )


@login_required
@permission_required('auth.add_group', raise_exception=True)
def group_create(request):
    return generic_form_view(
        request,
        model=Group,
        form_class=GroupForm,
        template_name='home/group_form.html',
        success_url=reverse_lazy('home:group_list'),
        title='Add Group',
    )


@login_required
@permission_required('auth.change_group', raise_exception=True)
def group_update(request, pk):
    return generic_form_view(
        request,
        model=Group,
        form_class=GroupForm,
        template_name='home/group_form.html',
        success_url=reverse_lazy('home:group_list'),
        title='Edit Group',
        object_instance=get_object_or_404(Group, pk=pk),
    )


@login_required
@permission_required('auth.delete_group', raise_exception=True)
def group_delete(request, pk):
    return generic_delete_view(
        request,
        model=Group,
        pk=pk,
        success_url=reverse_lazy('home:group_list'),
        template_name='admin_pages/confirm_delete.html',
        context_name='group',
        object_name_field='name',
    )