import os
from django.shortcuts import render, redirect
from django.http import HttpResponseForbidden
from .forms import LoginForm, SiteConfigForm
from .models import SiteConfig
from functools import wraps

def check_auth(request):
    return request.session.get('seo_authenticated', False)

def check_site(request):
    return request.session.get('site_id') is not None

def require_auth(view_func):
    @wraps(view_func)
    def _wrapped_view(request, *args, **kwargs):
        if not check_auth(request):
            return redirect('login')
        if not check_site(request) and view_func.__name__ != 'site_select':
            return redirect('site_select')
        return view_func(request, *args, **kwargs)
    return _wrapped_view

def site_select(request):
    # Sélection ou ajout d'un site à analyser
    sites = SiteConfig.objects.all()
    if request.method == 'POST':
        if 'site_id' in request.POST:
            site_id = request.POST['site_id']
            if SiteConfig.objects.filter(id=site_id).exists():
                request.session['site_id'] = int(site_id)
                return redirect('dashboard')
        else:
            form = SiteConfigForm(request.POST)
            if form.is_valid():
                site = form.save()
                request.session['site_id'] = site.id
                return redirect('dashboard')
    else:
        form = SiteConfigForm()
    return render(request, 'seo/site_select.html', {'form': form, 'sites': sites})

def login(request):
    error = False
    env_user = os.environ.get('SEO_DASH_USER')
    env_pass = os.environ.get('SEO_DASH_PASS')
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            if username == env_user and password == env_pass:
                request.session['seo_authenticated'] = True
                return redirect('dashboard')
            else:
                error = True
    else:
        form = LoginForm()
    return render(request, 'seo/login.html', {'form': form, 'error': error})

import requests
from django.conf import settings

@require_auth
def dashboard(request):
    site_id = request.session.get('site_id')
    from .models import SiteConfig
    site = SiteConfig.objects.get(id=site_id)
    # Analyse SEO de la home (une seule fois par session)
    seo_result = request.session.get('seo_result')
    if not seo_result:
        api_url = '/api/analyse/'
        # Appel interne (WSGI) ou HTTP local
        # Ici, on fait un appel HTTP local pour la démo
        full_api_url = f"http://{request.get_host()}/api/analyse/"
        try:
            resp = requests.post(full_api_url, json={'url': site.site_url}, timeout=10)
            if resp.status_code == 200:
                seo_result = resp.json()
                request.session['seo_result'] = seo_result
            else:
                seo_result = {'error': f"Erreur API: {resp.status_code}"}
        except Exception as e:
            seo_result = {'error': str(e)}
    return render(request, 'seo/dashboard.html', {
        'seo_result': seo_result,
        'site': site
    })

@require_auth
def categories(request):
    return render(request, 'seo/categories.html')

@require_auth
def produits(request):
    return render(request, 'seo/produits.html')

@require_auth
def meta(request):
    return render(request, 'seo/meta.html')

@require_auth
def parametres(request):
    return render(request, 'seo/parametres.html')
