from django.utils import timezone
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables

from .models import Phase, Team


class CalendarTable(tables.Table):
    class Meta:
        attrs = {
            'class': 'table table condensed table-striped',
        }
        row_attrs = {
            'class': lambda record: 'bg-success' if timezone.now() > record.end else
                                    'bg-warning' if timezone.now() > record.start else
                                    'bg-danger',
            'data-id': lambda record: str(record.phase_number),
        }
        model = Phase
        fields = ('phase_number', 'description', 'start', 'end',)
        template_name = 'django_tables2/bootstrap4.html'
        order_by = ('phase_number',)


# noinspection PyTypeChecker
class TeamTable(tables.Table):
    name = tables.LinkColumn(
        'participation:team_detail',
        args=[tables.A("id")],
        verbose_name=lambda: _("name").capitalize(),
    )

    problem = tables.Column(
        accessor="participation__problem",
        verbose_name=lambda: _("problem number").capitalize(),
    )

    class Meta:
        attrs = {
            'class': 'table table condensed table-striped',
        }
        model = Team
        fields = ('name', 'trigram', 'problem',)
        template_name = 'django_tables2/bootstrap4.html'


# noinspection PyTypeChecker
class ParticipationTable(tables.Table):
    name = tables.LinkColumn(
        'participation:participation_detail',
        args=[tables.A("id")],
        verbose_name=lambda: _("name").capitalize(),
        accessor="team__name",
    )

    trigram = tables.Column(
        verbose_name=lambda: _("trigram").capitalize(),
        accessor="team__trigram",
    )

    problem = tables.Column(
        verbose_name=lambda: _("problem number").capitalize(),
    )

    class Meta:
        attrs = {
            'class': 'table table condensed table-striped',
        }
        model = Team
        fields = ('name', 'trigram', 'problem',)
        template_name = 'django_tables2/bootstrap4.html'


class VideoTable(tables.Table):
    participationname = tables.LinkColumn(
        'participation:participation_detail',
        args=[tables.A("participation__pk")],
        verbose_name=lambda: _("name").capitalize(),
    )

    def render_participationname(self, record):
        return record.participation.team.name

    class Meta:
        attrs = {
            'class': 'table table condensed table-striped',
        }
        model = Team
        fields = ('participationname', 'link',)
        template_name = 'django_tables2/bootstrap4.html'