from django.db import models
from typing import Iterable, Optional
# from accounts.models import CustomUser
from ckeditor.fields import RichTextField
from django.conf import settings
from simplify import settings, utils

class Crop(models.Model):
    crop_id = models.CharField(max_length=255, null=True, blank=True)
    crop_name = models.CharField(max_length=255)
    image = models.ImageField(upload_to='images/')

    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, on_delete=models.SET_NULL)
    created = models.DateTimeField(auto_now_add=True)
    updated_by = models.DateTimeField(auto_now=True)

    def save(self, *args, **kwargs):
        self.crop_id = utils.random_string("CRCAT")
        super(Crop, self).save(*args, **kwargs)

    def __str__(self):
        return str(self.crop_name)

    class Meta:
        verbose_name_plural = "Crop"


class UserCropPlan(models.Model):
    user = models.ForeignKey('accounts.CustomUser', on_delete=models.CASCADE)
    zone = models.ForeignKey('farmzone.Zone', on_delete=models.CASCADE)
    crop = models.ForeignKey('crops.Crop', on_delete=models.CASCADE)
    crop_plan = models.FileField(upload_to='crop_plans/', null=True, blank=True)
    start_date = models.DateField()

class CropPlanRow(models.Model):
    user_crop_plan = models.ForeignKey(UserCropPlan, related_name='plan_rows', on_delete=models.CASCADE)
    date = models.DateField()
    day = models.IntegerField()
    stage = models.CharField(max_length=255)
    action = models.TextField()


    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f"{self.date} - {self.stage}"

    @property
    def user(self):
        return self.user_crop_plan.user

    @property
    def zone(self):
        return self.user_crop_plan.zone

    @property
    def crop(self):
        return self.user_crop_plan.crop
    class Meta:
        ordering = ['id']
