from django.utils.html import escape
from rest_framework import serializers
from django.core.exceptions import ObjectDoesNotExist
from .models import *

class LibrerieSerializer(serializers.ModelSerializer):
    class Meta:
        model = Libreria
        fields = ('__all__')

class ScuoleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Scuola
        fields = (
            'id', 'nome'
        )


class PrenotazioniSerializer(serializers.ModelSerializer):
    scuola = ScuoleSerializer(source='pr_scuola', read_only=True)

    pr_scuola_nome = serializers.CharField(source='pr_scuola.nome', read_only=True)  # Campo personalizzato
    nome_libreria= serializers.CharField(source='pr_libreria.denominazione', read_only=True)  # Campo personalizzato

    consegnatoSN = serializers.SerializerMethodField()
    def get_consegnatoSN(self, prenotazione):
        return 'SI' if prenotazione.pr_consegnato else ''

    facoltativoSN = serializers.SerializerMethodField()
    def get_facoltativoSN(self, prenotazione):
        return 'SI' if prenotazione.pr_facoltativo else ''

    link_edit = serializers.SerializerMethodField()
    def get_link_edit(self, prenotazione):
        url_dest = '<button class="btn btn-primary btn-sm" hx-get="/app/editpren/'+ str(prenotazione.id) +'" hx-target="#dialog">'
        url_dest += f'<i class="fa-solid fa-eye"></i> #{prenotazione.id}' + '</button>'  
        return url_dest   

    link_del = serializers.SerializerMethodField()
    def get_link_del(self, prenotazione):
        url = f'/app/delpren/{prenotazione.id}/'
        confirm_message = f'Confermi la cancellazione della prenotazione #{prenotazione.id}?'
        escaped_confirm_message = escape(confirm_message)  # Effettua l'escape del messaggio

        # Costruisci l'elemento <a> con l'attributo onclick corretto
        url_dest = (
            f'<a href="{url}" class="btn btn-danger" '
            f'onclick="return getConfirmation(&quot;{escaped_confirm_message}&quot;);" '  # Utilizza &quot; per le virgolette doppie
            f'data-toggle="tooltip" title="Elimina">'
            '<i class="fa-solid fa-trash"></i>'
            '</a>'
        )
        return url_dest

    class Meta:
        model = Prenotazione
        fields = (
            'id', 'pr_stato', 'nome_libreria', 'pr_data_richiesta', 'pr_codfiscale', 'scuola', 'pr_scuola','link_edit','link_del',
            'pr_scuola_nome', 'pr_classe', 'pr_facoltativo', 'pr_spesa', 'pr_consegnato','consegnatoSN', 'facoltativoSN', 'pr_annoscol',
        )

class FattureSerializer(serializers.ModelSerializer):
    nomecartoleria  = serializers.SerializerMethodField()
    def get_nomecartoleria(self, fattura): 
        return fattura.fa_libreria.denominazione
    class Meta:
        model = Fattura
        fields = ('id', 'fa_data', 'fa_classe', 'nomecartoleria', 'fa_importo', 'fa_note', 'fa_annoscol',)