# -*- coding: utf-8 -*-
from django_filters import rest_framework as filters
from core import models


class ChildFieldFilter(filters.FilterSet):
    class Meta:
        abstract = True
        fields = ['child']


class TimeFieldFilter(ChildFieldFilter):
    date = filters.DateFilter(field_name='time__date', label='Date')
    date_max = filters.DateFilter(field_name='time__date', label='Max. Date',
                                  lookup_expr='lte')
    date_min = filters.DateFilter(field_name='time__date', label='Min. Date',
                                  lookup_expr='gte')

    class Meta:
        abstract = True
        fields = sorted(ChildFieldFilter.Meta.fields + [
            'date',
            'date_max',
            'date_min'
        ])


class StartEndFieldFilter(ChildFieldFilter):
    end = filters.DateFilter(field_name='end__date', label='End Date')
    end_max = filters.DateFilter(field_name='end__date', label='Max. End Date',
                                 lookup_expr='lte')
    end_min = filters.DateFilter(field_name='end__date', label='Min. End Date',
                                 lookup_expr='gte')
    start = filters.DateFilter(field_name='start__date', label='Start Date')
    start_max = filters.DateFilter(field_name='start__date', lookup_expr='lte',
                                   label='Max. End Date')
    start_min = filters.DateFilter(field_name='start__date', lookup_expr='gte',
                                   label='Min. Start Date')

    class Meta:
        abstract = True
        fields = sorted(ChildFieldFilter.Meta.fields + [
            'end',
            'end_max',
            'end_min',
            'start',
            'start_max',
            'start_min'
        ])


class DiaperChangeFilter(TimeFieldFilter):
    class Meta(TimeFieldFilter.Meta):
        model = models.DiaperChange
        fields = sorted(TimeFieldFilter.Meta.fields + [
            'wet',
            'solid',
            'color',
            'amount'
        ])


class FeedingFilter(StartEndFieldFilter):
    class Meta(StartEndFieldFilter.Meta):
        model = models.Feeding
        fields = sorted(StartEndFieldFilter.Meta.fields + ['type', 'method'])


class NoteFilter(TimeFieldFilter):
    class Meta(TimeFieldFilter.Meta):
        model = models.Note


class SleepFilter(StartEndFieldFilter):
    class Meta(StartEndFieldFilter.Meta):
        model = models.Sleep


class TemperatureFilter(TimeFieldFilter):
    class Meta(TimeFieldFilter.Meta):
        model = models.Temperature


class TimerFilter(StartEndFieldFilter):
    class Meta(StartEndFieldFilter.Meta):
        model = models.Timer
        fields = sorted(StartEndFieldFilter.Meta.fields + ['active', 'user'])


class TummyTimeFilter(StartEndFieldFilter):
    class Meta(StartEndFieldFilter.Meta):
        model = models.TummyTime
