from django.shortcuts import render, get_object_or_404, redirect
from django.contrib import messages
from django.core.paginator import Paginator
from .models import Service, Certification, Projet, Temoignage, Configuration
from .forms import DemandeDevisForm, ContactForm


def get_config():
    """Récupère la configuration du site"""
    try:
        return Configuration.objects.first()
    except:
        return None


def home(request):
    """Page d'accueil"""
    services = Service.objects.filter(actif=True)[:6]
    projets = Projet.objects.filter(actif=True, mis_en_avant=True)[:6]
    certifications = Certification.objects.all()[:4]
    temoignages = Temoignage.objects.filter(actif=True)[:6]
    config = get_config()
    
    context = {
        'services': services,
        'projets': projets,
        'certifications': certifications,
        'temoignages': temoignages,
        'config': config,
    }
    return render(request, 'core/home.html', context)


def services(request):
    """Page des services"""
    services_list = Service.objects.filter(actif=True)
    config = get_config()
    
    context = {
        'services': services_list,
        'config': config,
    }
    return render(request, 'core/services.html', context)


def service_detail(request, slug):
    """Détail d'un service"""
    service = get_object_or_404(Service, slug=slug, actif=True)
    projets = Projet.objects.filter(services_utilises=service, actif=True)[:4]
    config = get_config()
    
    context = {
        'service': service,
        'projets': projets,
        'config': config,
    }
    return render(request, 'core/service_detail.html', context)


def portfolio(request):
    """Page portfolio"""
    categorie = request.GET.get('categorie', '')
    projets_list = Projet.objects.filter(actif=True)
    
    if categorie:
        projets_list = projets_list.filter(categorie=categorie)
    
    # Pagination
    paginator = Paginator(projets_list, 12)
    page_number = request.GET.get('page')
    projets = paginator.get_page(page_number)
    
    categories = Projet.CATEGORIE_CHOICES
    config = get_config()
    
    context = {
        'projets': projets,
        'categories': categories,
        'categorie_actuelle': categorie,
        'config': config,
    }
    return render(request, 'core/portfolio.html', context)


def projet_detail(request, slug):
    """Détail d'un projet"""
    projet = get_object_or_404(Projet, slug=slug, actif=True)
    autres_projets = Projet.objects.filter(actif=True).exclude(id=projet.id)[:3]
    config = get_config()
    
    context = {
        'projet': projet,
        'autres_projets': autres_projets,
        'config': config,
    }
    return render(request, 'core/projet_detail.html', context)


def certifications_view(request):
    """Page certifications"""
    certifications_list = Certification.objects.all()
    config = get_config()
    
    context = {
        'certifications': certifications_list,
        'config': config,
    }
    return render(request, 'core/certifications.html', context)


def demande_devis(request):
    """Page demande de devis"""
    if request.method == 'POST':
        form = DemandeDevisForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, 'Votre demande de devis a été envoyée avec succès ! Nous vous contacterons dans les plus brefs délais.')
            return redirect('devis')
    else:
        form = DemandeDevisForm()
    
    config = get_config()
    context = {
        'form': form,
        'config': config,
    }
    return render(request, 'core/devis.html', context)


def contact(request):
    """Page contact"""
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, 'Votre message a été envoyé avec succès ! Nous vous répondrons rapidement.')
            return redirect('contact')
    else:
        form = ContactForm()
    
    config = get_config()
    context = {
        'form': form,
        'config': config,
    }
    return render(request, 'core/contact.html', context)


def a_propos(request):
    """Page à propos"""
    certifications = Certification.objects.all()[:4]
    config = get_config()
    
    context = {
        'certifications': certifications,
        'config': config,
    }
    return render(request, 'core/a_propos.html', context)
