from django import forms
from .models import Comment
from django.core.exceptions import ValidationError
from django.utils.html import strip_tags


class CommentForm(forms.ModelForm):
    parent_id = forms.IntegerField(widget=forms.HiddenInput, required=False)

    class Meta:
        model = Comment
        fields = ['author_name', 'author_email', 'content', 'parent_id']
        widgets = {
            'author_name': forms.TextInput(attrs={'class': 'form-input', 'placeholder': 'Ваше имя'}),
            'author_email': forms.EmailInput(attrs={'class': 'form-input', 'placeholder': 'Ваш email'}),
            'content': forms.Textarea(attrs={'class': 'form-textarea', 'rows': 4, 'placeholder': 'Текст комментария',
                                             'autocomplete': 'off'}),
        }

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super().__init__(*args, **kwargs)

        if self.request and self.request.user.is_authenticated:
            # Скрываем поля имени и email
            self.fields['author_name'].widget = forms.HiddenInput()
            self.fields['author_email'].widget = forms.HiddenInput()
            # Заполняем начальные значения из профиля
            self.initial['author_name'] = self.request.user.get_full_name() or self.request.user.username
            self.initial['author_email'] = self.request.user.email


    def clean_content(self):
        content = self.cleaned_data['content']
        # Удаляем HTML-теги и проверяем, остался ли текст
        clean_text = strip_tags(content)
        if not clean_text.strip():
            raise ValidationError("Комментарий не должен состоять только из HTML-тегов")
        # Если хотите запретить любые теги, можно сравнить content и clean_text
        if content != clean_text:
            raise ValidationError("HTML-теги в комментариях запрещены")
        return content
