from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin, Permission
from accounts.models import CustomUser

class FarmerRegistration(models.Model):
    GENDER_CHOICES = (
        ('Male', 'Male'),
        ('Female', 'Female'),
        ('Other', 'Other')
    )

    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name="farmer_registrations")
    name = models.CharField(max_length=30)
    gender = models.CharField(max_length=10, choices=GENDER_CHOICES)
    age = models.PositiveIntegerField()
    mobile = models.CharField(max_length=15)
    email = models.EmailField(blank=True, null=True)
    pincode = models.CharField(max_length=15)
    state = models.CharField(max_length=128)
    district = models.CharField(max_length=128)
    krishibhavan = models.CharField(max_length=128)
    place_street = models.CharField(max_length=128)
    house = models.CharField(max_length=128)
    created_by = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.SET_NULL, related_name="created_farmers")
    created = models.DateTimeField(auto_now_add=True)
    updated_by = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.SET_NULL,
                                   related_name="updated_farmers")


    def __str__(self):
        return self.name

    def created_by_name(self):
        return self.created_by.full_name() if self.created_by else "No creator"

class LandInfo(models.Model):
    IRRIGATION_CHOICES = (
        ('Canal', 'canal'),
        ('Well', 'well'),
    )
    CROP_CHOICES = (
        ('Tomato', 'tomato'),
        ('Cardomom', 'cardomom'),
        ('Paddy', 'paddy')
    )
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name="land_infos")
    crop_variety = models.CharField(max_length=128, null=True)
    irigation_source = models.CharField(max_length=128, null=True, blank=True)
    Area = models.CharField(max_length=128, null=True)
    field_name = models.CharField(max_length=128, null=True)

    survey_number = models.CharField(max_length=128, null=True)
    tax_receipt_image = models.ImageField(upload_to='images/', null=True, blank=True)
    padasekharam = models.CharField(max_length=128, null=True)
    pincode = models.CharField(max_length=15, null=True)
    district = models.CharField(max_length=128, null=True)
    state = models.CharField(max_length=128, null=True)
    krishibhavan = models.CharField(max_length=128, null=True)
    created_by = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.SET_NULL, related_name="created_land_infos")
    created = models.DateTimeField(auto_now_add=True)
    updated_by = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.SET_NULL,
                                   related_name="updated_land_farmers")

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

class OtherLandInfo(models.Model):
    land_info_id = models.ForeignKey(LandInfo, default=None, on_delete=models.CASCADE, related_name="other_land_infos")
    crop_variety = models.CharField(max_length=128, null=True)
    Area= models.CharField(max_length=128, null=True)
    irigation_source = models.CharField(max_length=128, null=True)
    field_name = models.CharField(max_length=128, null=True)

    survey_number = models.CharField(max_length=128, null=True)
    tax_receipt_image = models.ImageField(upload_to='images/', null=True, blank=True)
    padasekharam = models.CharField(max_length=128, null=True)
    pincode = models.CharField(max_length=15, null=True)
    district = models.CharField(max_length=128, null=True)
    state = models.CharField(max_length=128, null=True)
    krishibhavan = models.CharField(max_length=128, null=True)
    created_by = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.SET_NULL, related_name="created_other_land_infos")
    created = models.DateTimeField(auto_now_add=True)
    updated_by = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.SET_NULL,
                                   related_name="updated_other_land_farmers")

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

class CropInfo(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name="crop_infos")
    field_name = models.CharField(max_length=128, null=True)
    crop_variety = models.CharField(max_length=128, null=True)
    days_to_harvest = models.CharField(max_length=128, null=True)
    created_by = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.SET_NULL, related_name="created_crop_infos")
    created = models.DateTimeField(auto_now_add=True)
    updated_by = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.SET_NULL,
                                   related_name="updated_crop_farmers")
    def __str__(self):
        return str(self.crop_variety)

class OtherCropInfo(models.Model):
    crop_info_id = models.ForeignKey(CropInfo, default=None, on_delete=models.CASCADE, related_name="other_crop_infos")
    field_name = models.CharField(max_length=128, null=True)
    crop_variety = models.CharField(max_length=128, null=True)
    days_to_harvest = models.CharField(max_length=128, null=True)
    created_by = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.SET_NULL, related_name="created_other_crop_infos")
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    updated_by = models.ForeignKey(CustomUser, blank=True, null=True, on_delete=models.SET_NULL,
                                   related_name="updated_other_crop_farmers")

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