from django.shortcuts import render, get_object_or_404
from django.http import JsonResponse
from django.core.files.storage import FileSystemStorage
from django.conf import settings
from django.views.decorators.http import require_POST
import os
from .models import Tiquetera

# Create your views here.
def gestion_tq_home(request):
    tiqueteras = Tiquetera.objects.all()
    return render(request, 'gestion_tq.html', {'tiqueteras': tiqueteras})

@require_POST
def update_tiquetera(request, pk):
    tiquetera = get_object_or_404(Tiquetera, pk=pk)
    
    # Update fields
    tiquetera.nombre = request.POST.get('nombre', tiquetera.nombre)
    tiquetera.detalle = request.POST.get('detalle', tiquetera.detalle)
    tiquetera.fecha_limite = request.POST.get('fecha_limite') or None
    tiquetera.tipo = request.POST.get('tipo', tiquetera.tipo)
    tiquetera.antiguedad_min = request.POST.get('antiguedad_min') or None
    tiquetera.antiguedad_max = request.POST.get('antiguedad_max') or None
    tiquetera.condiciones = request.POST.get('condiciones', tiquetera.condiciones)

    # Handle Image Upload
    if 'imagen' in request.FILES:
        # Delete old image if exists
        if tiquetera.ruta:
            old_image_path = os.path.join(settings.MEDIA_ROOT, 'tq', tiquetera.ruta)
            if os.path.exists(old_image_path):
                os.remove(old_image_path)

        image = request.FILES['imagen']
        fs = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'tq'))
        filename = fs.save(image.name, image)
        tiquetera.ruta = filename # Store filename only, as per existing logic

    tiquetera.save()

    return JsonResponse({
        'success': True,
        'message': 'Tiquet actualizado correctamente',
        'data': {
            'id': tiquetera.id,
            'nombre': tiquetera.nombre,
            'detalle': tiquetera.detalle,
            'fecha_limite': tiquetera.fecha_limite,
            'tipo': tiquetera.tipo,
            'ruta': tiquetera.ruta,
            'antiguedad_min': tiquetera.antiguedad_min,
            'antiguedad_max': tiquetera.antiguedad_max,
            'condiciones': tiquetera.condiciones,
            'full_ruta': f'/media/tq/{tiquetera.ruta}' if tiquetera.ruta else ''
        }
    })

@require_POST
def create_tiquetera(request):
    # Create new instance
    tiquetera = Tiquetera()
    
    # Update fields
    tiquetera.nombre = request.POST.get('nombre', '')
    tiquetera.detalle = request.POST.get('detalle', '')
    tiquetera.fecha_limite = request.POST.get('fecha_limite') or None
    tiquetera.tipo = request.POST.get('tipo', 0)
    tiquetera.antiguedad_min = request.POST.get('antiguedad_min') or None
    tiquetera.antiguedad_max = request.POST.get('antiguedad_max') or None
    tiquetera.condiciones = request.POST.get('condiciones', '')

    # Handle Image Upload
    if 'imagen' in request.FILES:
        image = request.FILES['imagen']
        fs = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'tq'))
        filename = fs.save(image.name, image)
        tiquetera.ruta = filename

    tiquetera.save()

    return JsonResponse({
        'success': True,
        'message': 'Tiquet creado correctamente',
        'data': {
            'id': tiquetera.id,
            'nombre': tiquetera.nombre,
            'detalle': tiquetera.detalle,
            'fecha_limite': tiquetera.fecha_limite,
            'tipo': tiquetera.tipo,
            'ruta': tiquetera.ruta,
            'antiguedad_min': tiquetera.antiguedad_min,
            'antiguedad_max': tiquetera.antiguedad_max,
            'condiciones': tiquetera.condiciones,
            'full_ruta': f'/media/tq/{tiquetera.ruta}' if tiquetera.ruta else ''
        }
    })

@require_POST
def delete_tiquetera(request, pk):
    tiquetera = get_object_or_404(Tiquetera, pk=pk)
    
    # Delete image file if exists
    if tiquetera.ruta:
        image_path = os.path.join(settings.MEDIA_ROOT, 'tq', tiquetera.ruta)
        if os.path.exists(image_path):
            os.remove(image_path)
            
    tiquetera.delete()
    
    return JsonResponse({
        'success': True,
        'message': 'Tiquet eliminado correctamente'
    })

def export_tiqueteras_csv(request):
    import csv
    from django.http import HttpResponse

    response = HttpResponse(content_type='text/csv; charset=utf-8')
    response['Content-Disposition'] = 'attachment; filename="tiqueteras.csv"'
    
    # Add BOM for Excel
    response.write(u'\ufeff'.encode('utf8'))

    writer = csv.writer(response)
    # Header
    writer.writerow(['ID', 'Nombre', 'Detalle', 'Fecha Límite', 'Tipo', 'Antigüedad Min', 'Antigüedad Max', 'Condiciones'])

    # Data
    tiqueteras = Tiquetera.objects.all()
    for t in tiqueteras:
        tipo_display = 'General'
        if t.tipo == 1:
            tipo_display = 'Especial'
        elif t.tipo == 2:
            tipo_display = 'Comodín'

        writer.writerow([
            t.id,
            t.nombre,
            t.detalle,
            t.fecha_limite,
            tipo_display,
            t.antiguedad_min,
            t.antiguedad_max,
            t.condiciones
        ])

    return response
