from django.db import models
from django.contrib.gis.db import models as gis_models


class BiotopeCode(models.Model):
    """Model to store biotope code hierarchy from the CSV."""
    code = models.CharField(max_length=200, unique=True, db_index=True)
    level = models.IntegerField()
    title = models.CharField(max_length=500)
    
    # Parent code (the code without the last part)
    parent_code = models.CharField(max_length=200, blank=True, null=True, db_index=True)
    
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    class Meta:
        db_table = 'biotope_code'
        ordering = ['code']
        indexes = [
            models.Index(fields=['code']),
            models.Index(fields=['parent_code']),
        ]
    
    def __str__(self):
        return f"{self.code}: {self.title}"


class GwyneddNrwPh1IntertidalBiotope(models.Model):
    gid = models.AutoField(primary_key=True)
    geom = gis_models.MultiPolygonField(srid=27700, blank=True, null=True)
    objectid = models.IntegerField(blank=True, null=True)
    polygonid = models.FloatField(blank=True, null=True)
    siteid = models.FloatField(blank=True, null=True)
    siteno = models.CharField(blank=True, null=True)
    biotopeid = models.FloatField(blank=True, null=True)
    biotope = models.CharField(blank=True, null=True)
    maptext = models.CharField(blank=True, null=True)
    lifeform = models.CharField(blank=True, null=True)
    areaha = models.FloatField(blank=True, null=True)
    notes = models.CharField(blank=True, null=True)
    artificial = models.CharField(blank=True, null=True)
    type = models.CharField(blank=True, null=True)
    important = models.IntegerField(blank=True, null=True)
    specialise = models.IntegerField(blank=True, null=True)
    habitat = models.CharField(blank=True, null=True)
    visit = models.DateField(blank=True, null=True)
    last_visit = models.DateField(blank=True, null=True)
    classifica = models.CharField(blank=True, null=True)
    owner = models.CharField(blank=True, null=True)
    data_type = models.CharField(blank=True, null=True)
    f04 = models.FloatField(blank=True, null=True)
    f2004_code = models.CharField(blank=True, null=True)
    maptext_04 = models.CharField(blank=True, null=True)
    f040 = models.CharField(blank=True, null=True)
    substrata = models.CharField(blank=True, null=True)
    globalid = models.CharField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'gwynedd_nrw_ph1_intertidal_biotope'

class GwyneddNrwPh1IntertidalBiotopeNotes(models.Model):
    gid = models.AutoField(primary_key=True)
    geom = gis_models.PointField(srid=27700, blank=True, null=True)
    id = models.CharField(blank=True, null=True)
    objectid = models.IntegerField(blank=True, null=True)
    siteid = models.FloatField(blank=True, null=True)
    siteno = models.CharField(blank=True, null=True)
    targetnote = models.IntegerField(blank=True, null=True)
    xcoordinat = models.FloatField(blank=True, null=True)
    ycoordinat = models.FloatField(blank=True, null=True)
    osgridref = models.CharField(blank=True, null=True)
    targetno0 = models.CharField(blank=True, null=True)
    targetno1 = models.CharField(blank=True, null=True)
    accesslink = models.CharField(blank=True, null=True)
    globalid = models.CharField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'gwynedd_nrw_ph1_intertidal_biotope_notes'        


class GwyneddNrwPh1IntertidalBiotopeSites(models.Model):
    siteid = models.FloatField(primary_key=True)
    siteno = models.CharField(blank=True, null=True)
    geom = gis_models.GeometryField(srid=0, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'gwynedd_nrw_ph1_intertidal_biotope_sites'


class IndicatorSpecies(models.Model):
    """Model to store indicator species data."""
    f2004_code = models.CharField(max_length=200, db_index=True, help_text="Biotope Code (f2004_code)")
    species_name = models.CharField(max_length=500, db_index=True)
    
    class Meta:
        db_table = 'indicator_species_v2'
        ordering = ['f2004_code', 'species_name']
        indexes = [
            models.Index(fields=['f2004_code']),
            models.Index(fields=['species_name']),
        ]
    
    def __str__(self):
        return f"{self.f2004_code}: {self.species_name}"

