from django.forms import ModelForm
from django import forms
from pages.models import *

from functions import FileValidator

validate_audio = FileValidator(max_size=1024 * 1024 * 10, content_types=('audio/mpeg'))


class PageForm(ModelForm):
    class Meta:
        model = Page
        fields = ('title', 'order',)


class ThemeForm(ModelForm):
    class Meta:
        model = Theme
        fields = ('title', 'html', 'css',)


class SelfAssessmentForm(ModelForm):
    class Meta:
        model = SelfAssessment
        fields = ('question', 'options', 'answer',)


class StaticForm(ModelForm):

    audio_file = forms.FileField(label='Audio File', required=False,  validators=[validate_audio], error_messages={'invalid': "Audio files only"}, widget=forms.FileInput(attrs={'accept': '.mp3'}))

    class Meta:
        model = PageStatic
        fields = ('content', 'audio_file')


class PanoForm(ModelForm):
    class Meta:
        model = Page360
        fields = ('panorama',)


class Page360SelectionForm(ModelForm):
    class Meta:
        model = Page360Selection
        fields = ('page_360',)


class MovementForm(ModelForm):

    audio = forms.FileField(label='Audio File', required=False,  validators=[validate_audio], error_messages={'invalid': "Audio files only"}, widget=forms.FileInput(attrs={'accept': '.mp3'}))

    class Meta:
        model = PageMovement
        fields = ('audio',)


class FrameForm(ModelForm):
    class Meta:
        model = PageMovementFrame
        fields = ('order', 'frame_number', 'timing', 'image', 'caption',)


class HotspotForm(ModelForm):
    class Meta:
        model = Hotspot
        fields = ('hazard', 'title', 'score_board', 'description', 'identifier', 'liklihood', 'severity', 'rating',)


class RateActivityForm(ModelForm):
    class Meta:
        model = RateActivity
        fields = ('name',)


class PageRateActivityForm(ModelForm):
    class Meta:
        model = PageRateActivity
        fields = ('activity', 'html_above',)


class RateActivityOptionForm(ModelForm):
    class Meta:
        model = RateActivityOption
        fields = ('order', 'name', 'stars', 'description',)


class RateActivityQuestionForm(ModelForm):
    class Meta:
        model = RateActivityQuestion
        fields = ('order', 'description',)


class PanoramaForm(ModelForm):
    class Meta:
        model = Panorama
        fields = '__all__'


class PageRateActivitySummaryForm(ModelForm):
    class Meta:
        model = PageRateActivitySummary
        fields = ('activity',)


class PageDragDropForm(ModelForm):
    class Meta:
        model = PageDragDrop
        fields = ('custom_css', 'html_above', 'html_below',)


class DragDropDraggableForm(ModelForm):
    class Meta:
        model = DragDropDraggable
        fields = ('order', 'image', 'title',)


class DragDropTargetForm(ModelForm):
    class Meta:
        model = DragDropTarget
        fields = ('order', 'image', 'draggable',)


class PageDragDropColumnsForm(ModelForm):
    class Meta:
        model = PageDragDropColumns
        fields = ('title', 'html_above',)


class PageDragDropColumnForm(ModelForm):
    class Meta:
        model = PageDragDropColumn
        fields = ('title', 'sub_title', 'spaces', 'order',)


class PageDragDropColumnDraggableForm(ModelForm):
    class Meta:
        model = PageDragDropColumnDraggable
        fields = ('text', 'explanation', 'order',)


class PageDragDropColumnsEvaluateForm(ModelForm):
    class Meta:
        model = PageDragDropColumnsEvaluate
        fields = ('title', 'html_above',)


class PageDragDropColumnEvaluateForm(ModelForm):
    class Meta:
        model = PageDragDropColumnEvaluate
        fields = ('title', 'sub_title', 'order', 'none', 'any', 'all',)


class PageDragDropColumnEvaluateDraggableForm(ModelForm):
    class Meta:
        model = PageDragDropColumnEvaluateDraggable
        fields = ('text', 'explanation', 'order',)


class HelpForm(ModelForm):
    class Meta:
        model = Help
        fields = ('title', 'content', 'published')


class PageDragDropColumnsEvaluateForm(ModelForm):
    class Meta:
        model = PageDragDropColumnsEvaluate
        fields = ('title', 'html_above',)
