from django.db import models
from django.contrib.auth.models import User


class MetaDataModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True,null=True,blank=True)
    updated_at = models.DateTimeField(auto_now=True,null=True,blank=True)
    created_by = models.CharField(max_length=16,null=True,blank=True)
    updated_by = models.CharField(max_length=16,null=True,blank=True)

    class Meta:
        abstract = True

class CountryMaster(MetaDataModel):
    name = models.CharField(max_length=50, default=None)
    value = models.CharField(max_length=100, default=None)
    code = models.CharField(max_length=10, blank=True, null=True)

    def __str__(self) -> str:
        return self.name

class StateMaster(MetaDataModel):
    country = models.ForeignKey(CountryMaster, default=None, on_delete=models.CASCADE)
    name = models.CharField(max_length=50, default=None)
    value = models.CharField(max_length=100, default=None)
    code = models.CharField(max_length=10, blank=True, null=True)

    def __str__(self) -> str:
        return self.name
    

class DistrictMaster(MetaDataModel):
    state = models.ForeignKey(StateMaster, default=None, on_delete=models.CASCADE)
    name = models.CharField(max_length=50, default=None)
    value = models.CharField(max_length=100, default=None)
    code = models.CharField(max_length=10, blank=True, null=True)

    def __str__(self) -> str:
        return self.name
    
class SubDistrictMaster(MetaDataModel):
    district = models.ForeignKey(DistrictMaster, default=None, on_delete=models.CASCADE)
    name = models.CharField(max_length=50, default=None)
    value = models.CharField(max_length=100, default=None)
    code = models.CharField(max_length=10, blank=True, null=True)

    def __str__(self) -> str:
        return self.name
    
class CityMaster(MetaDataModel):
    subdistrict = models.ForeignKey(SubDistrictMaster, default=None, on_delete=models.CASCADE)
    name = models.CharField(max_length=50, default=None)
    value = models.CharField(max_length=100, default=None)
    code = models.CharField(max_length=10, blank=True, null=True)

    def __str__(self) -> str:
        return self.name
    
class AreaMaster(MetaDataModel):
    city = models.ForeignKey(CityMaster, default=None, on_delete=models.CASCADE)
    name = models.CharField(max_length=50, default=None)
    value = models.CharField(max_length=100, default=None)
    pincode = models.CharField(max_length=10, default=None)

    def __str__(self) -> str:
        return self.name
    
class SubAreaMaster(MetaDataModel):
    area = models.ForeignKey(AreaMaster, default=None, on_delete=models.CASCADE)
    name = models.CharField(max_length=50, default=None)
    value = models.CharField(max_length=100, default=None)

    def __str__(self) -> str:
        return self.name

class StatusMaster(MetaDataModel):
    name = models.CharField(max_length=50, default=None)
    value = models.CharField(max_length=100, default=None)
    order_by = models.IntegerField(default=None)


    def __str__(self) -> str:
        return self.name

class ImageMaster(MetaDataModel):
    country_id = models.IntegerField(default=None)
    state_id = models.ForeignKey(StateMaster, blank=True, null=True,default=None, on_delete=models.PROTECT)
    district_id = models.ForeignKey(DistrictMaster, blank=True, null=True, on_delete=models.PROTECT, default=None)
    subdistrict_id = models.ForeignKey(SubDistrictMaster, blank=True, null=True, on_delete=models.PROTECT, default=None)
    city_id = models.ForeignKey(CityMaster, blank=True, null=True, on_delete=models.PROTECT, default=None)
    area_id = models.ForeignKey(AreaMaster, blank=True, null=True, on_delete=models.PROTECT, default=None)
    subarea_id = models.ForeignKey(SubAreaMaster, blank=True, null=True, on_delete=models.PROTECT, default=None)
    drive_url =  models.CharField(max_length=1024, default=None)
    image_date = models.DateField(blank=True,null=True)
    size_of_survey_area = models.FloatField(default=None)
    drive_image_id =  models.CharField(max_length=255, default=None)
    latitude = models.FloatField(blank=True, null=True)
    image_name = models.CharField(max_length=1024, default=None)
    image_capture_date = models.DateField(blank=True,null=True)
    longitude = models.FloatField(blank=True, null=True)
    altitude = models.FloatField(blank=True, null=True)
    round = models.CharField(max_length=30, default=None)
    water_percent = models.FloatField(blank=True,default=None, null=True)
    is_deleted = models.BooleanField(default=False)
    status = models.ForeignKey(StatusMaster, default=None, on_delete=models.CASCADE)

   
    

class UserLocation(MetaDataModel):
    user = models.ForeignKey(User,blank=True, default=None, on_delete=models.SET_DEFAULT)
    country_id = models.IntegerField(default=None)
    state_id = models.ForeignKey(StateMaster, blank=True, null=True,default="", on_delete=models.PROTECT)
    district_id = models.ForeignKey(DistrictMaster, blank=True, null=True, on_delete=models.PROTECT, default=None)
    subdistrict_id = models.ForeignKey(SubDistrictMaster, blank=True, null=True, on_delete=models.PROTECT, default=None)
    city_id = models.ForeignKey(CityMaster, blank=True, null=True, on_delete=models.PROTECT, default=None)
    area_id = models.ForeignKey(AreaMaster, blank=True, null=True, on_delete=models.PROTECT, default=None)
    subarea_id = models.ForeignKey(SubAreaMaster, blank=True, null=True, on_delete=models.PROTECT, default=None)




