import time

from django.db import models
from django.utils import timezone

from Members.models import Member


class Course(models.Model):
    inserted_date_time = models.DateTimeField(
        auto_now_add=True,
        verbose_name='تاریخ ثبت'
    )

    title = models.CharField(
        max_length=200,
        verbose_name='عنوان دوره'
    )

    total_sessions = models.PositiveIntegerField(
        verbose_name='تعداد جلسات'
    )

    def __str__(self):
        return self.title

    class Meta:
        ordering = ['-inserted_date_time']
        verbose_name = 'دوره'
        verbose_name_plural = 'دوره‌ها'


class CourseFee(models.Model):
    inserted_date_time = models.DateTimeField(
        auto_now_add=True,
        verbose_name='تاریخ ثبت'
    )

    course = models.ForeignKey(
        Course,
        on_delete=models.CASCADE,
        related_name='fees',
        verbose_name='دوره'
    )

    fee = models.PositiveIntegerField(
        verbose_name='شهریه'
    )

    def __str__(self):
        return f'{self.course.title} - {self.fee}'

    class Meta:
        ordering = ['-inserted_date_time']
        verbose_name = 'شهریه دوره'
        verbose_name_plural = 'شهریه‌های دوره'


class MemberCourse(models.Model):

    member = models.ForeignKey(
        Member,
        on_delete=models.CASCADE,
        related_name='courses',
        verbose_name='عضو'
    )

    start_date = models.DateTimeField(
        verbose_name='تاریخ شروع'
    )

    end_date = models.DateTimeField(
        verbose_name='تاریخ پایان'
    )

    total_sessions = models.PositiveIntegerField(
        verbose_name='کل جلسات'
    )

    used_sessions = models.PositiveIntegerField(
        default=0,
        verbose_name='جلسات استفاده شده'
    )

    fee = models.DecimalField(
        max_digits=15,
        decimal_places=0,
        verbose_name='شهریه'
    )

    paid_fee = models.DecimalField(
        max_digits=15,
        decimal_places=0,
        default=0,
        verbose_name='پرداخت شده'
    )

    pos_payment = models.DecimalField(
        max_digits=15,
        decimal_places=0,
        default=0,
        verbose_name='پرداخت کارتخوان'
    )

    cash_payment = models.DecimalField(
        max_digits=15,
        decimal_places=0,
        default=0,
        verbose_name='پرداخت نقدی'
    )

    transfer_payment = models.DecimalField(
        max_digits=15,
        decimal_places=0,
        default=0,
        verbose_name='پرداخت انتقالی'
    )

    inserted_date_time = models.DateTimeField(
        default=timezone.now,
        verbose_name='تاریخ ثبت',
    )

    @property
    def remaining_sessions(self):
        return self.total_sessions - self.used_sessions

    @property
    def is_expired(self):
        from django.utils import timezone
        return timezone.now() > self.end_date

    @property
    def is_active(self):
        from django.utils import timezone
        now = timezone.now()

        return (
                now >= self.start_date
                and now <= self.end_date
                and self.used_sessions < self.total_sessions
        )

    class Meta:
        ordering = ['-start_date']
        verbose_name = 'دوره عضو'
        verbose_name_plural = 'دوره‌های اعضا'

    def __str__(self):
        return f'{self.member} - {self.start_date.date()}'
