from django.shortcuts import render, redirect, get_object_or_404
from django.views.generic import View, ListView, TemplateView, DetailView, CreateView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth import authenticate, login, logout  # <-- AGREGAR logout
from django.contrib import messages
from django.http import JsonResponse, HttpResponse
from django.urls import reverse, reverse_lazy
from django.db.models import Count, Q
from django.utils import timezone
from django.core.files.base import ContentFile
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST

from dashboard.db_helper import DBHelper
from .models import SupportTicket, TicketMessage

class LoginView(View):
    """Vista de login personalizada"""
    
    def get(self, request):
        # Si ya está logueado, redirigir al dashboard
        if request.user.is_authenticated:
            return redirect('dashboard:dashboard')
        return render(request, 'clients/login.html')
    
    def post(self, request):
        username = request.POST.get('username')
        password = request.POST.get('password')
        
        user = authenticate(request, username=username, password=password)
        
        if user is not None:
            login(request, user)
            messages.success(request, f'¡Bienvenido {user.first_name or user.username}!')
            
            # Redirigir a 'next' si existe, sino al dashboard
            next_url = request.GET.get('next', 'dashboard:dashboard')
            return redirect(next_url)
        else:
            messages.error(request, 'Usuario o contraseña incorrectos')
            return render(request, 'clients/login.html')


class LogoutView(View):
    """Vista de logout personalizada"""
    
    def get(self, request):
        logout(request)
        return redirect('/')
    

class PQRSView(LoginRequiredMixin, TemplateView):  # <-- AGREGAR LoginRequiredMixin
    #Vista principal PQRS con datos de prueba#
    template_name = 'clients/pqrs.html'
    login_url = '/'
    
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        
        # DATOS DE PRUEBA (hardcoded) - Tickets activos
        context['active_tickets'] = [
            {
                'pk': 1,
                'ticket_number': '#TKT-20251017-0001',
                'subject': 'Problema con acceso a estadísticas del partido',
                'status': 'in_progress',
                'status_display': 'En Progreso',
                'ticket_type_display': 'Reclamo',
                'priority_display': 'Media',
                'created_at': timezone.now(),
            },
            {
                'pk': 2,
                'ticket_number': '#TKT-20251015-0089',
                'subject': 'Sugerencia para mejorar la visualización de mapas de calor',
                'status': 'waiting_user',
                'status_display': 'Esperando Respuesta',
                'ticket_type_display': 'Sugerencia',
                'priority_display': 'Baja',
                'created_at': timezone.now(),
            },
        ]
        
        # DATOS DE PRUEBA - Historial
        context['history_tickets'] = [
            {
                'pk': 3,
                'ticket_number': '#TKT-20251001-0045',
                'subject': 'Consulta sobre exportación de reportes en PDF',
                'status': 'resolved',
                'status_display': 'Resuelto',
                'ticket_type_display': 'Petición',
                'created_at': timezone.now(),
                'resolved_at': timezone.now(),
            },
            {
                'pk': 4,
                'ticket_number': '#TKT-20250928-0034',
                'subject': 'Error al cargar dashboard principal',
                'status': 'closed',
                'status_display': 'Cerrado',
                'ticket_type_display': 'Reclamo',
                'created_at': timezone.now(),
                'closed_at': timezone.now(),
            },
        ]
        
        return context



class TicketCreateView(CreateView):
    #Vista para crear un nuevo ticket (por ahora desactivada)
    model = SupportTicket
    template_name = 'pqrs.html'
    fields = ['ticket_type', 'subject', 'description', 'priority']
    success_url = reverse_lazy('pqrs')
    
    def dispatch(self, request, *args, **kwargs):
        messages.info(request, 'Función de creación de tickets temporalmente deshabilitada (modo demo).')
        return redirect('pqrs')



class TicketDetailView(DetailView):
    #Vista para ver detalles de ticket (por ahora deshabilitada)#
    model = SupportTicket
    template_name = 'clients/ticket_detail.html'
    context_object_name = 'ticket'
    
    def dispatch(self, request, *args, **kwargs):
        messages.info(request, 'Vista de detalles temporalmente deshabilitada (modo demo).')
        return redirect('pqrs')



class TicketMessageCreateView(CreateView):
    #Vista para crear respuesta (por ahora desactivada)
    model = TicketMessage
    fields = ['message']
    
    def dispatch(self, request, *args, **kwargs):
        messages.info(request, 'Función de respuestas temporalmente deshabilitada (modo demo).')
        return redirect('pqrs')


