from djongo import models
from v1.models import PropertiesNested, Types, Agents, Offices, Features, State, City, Neighborhood
from accounts.models import Cliente
from datetime import datetime
from django.contrib.auth import get_user_model
import random

def upload_path_handler(instance, filename):
	class_name = instance.__class__.__name__.lower()
	if not instance.id:
		instance.id = random.randint(10000000, 99999999)
	return f'{class_name}s/img/{instance.id}/{filename}'


class MongoManager(models.DjongoManager):
    def __init__(self):
        super().__init__()
        # the mongo database name in settings.py
        self._db = 'mongodb'

Usuario = get_user_model()


class Favorito(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	cliente = models.ArrayReferenceField(to=Cliente, to_field='id', db_column='cliente_id', on_delete=models.CASCADE)
	tipo_imovel = models.ArrayReferenceField(to=Types, to_field='type_id', db_column='tipo_imovel_id', on_delete=models.CASCADE)
	imovel = models.ArrayReferenceField(to=PropertiesNested, to_field='property_id', db_column='imovel_id', on_delete=models.CASCADE)

	# tipo_imovel = models.ForeignKey(Types, to_field='type_id', on_delete=models.CASCADE, related_name='favorito_tipo_imovel')
	# imovel = models.ForeignKey(PropertiesNested, to_field='property_id', on_delete=models.CASCADE, related_name='favorito_imovel')
	# cliente = models.ForeignKey(Cliente, to_field='id', on_delete=models.CASCADE, related_name='favorito_cliente')

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Favorito'
		verbose_name_plural = 'Favoritos'
		app_label = 'panel'
	
  

class ContatoCliente(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	tipo_imovel = models.ArrayReferenceField(to=Types, to_field='type_id', on_delete=models.CASCADE)
	imovel = models.ArrayReferenceField(to=PropertiesNested, to_field='property_id', on_delete=models.CASCADE)
	cliente = models.ArrayReferenceField(to=Cliente, to_field='id', on_delete=models.CASCADE)
	# tipo_imovel = models.ForeignKey(Types, to_field='type_id', on_delete=models.CASCADE, related_name='contato_tipo_imovel')
	# imovel = models.ForeignKey(PropertiesNested, to_field='property_id', on_delete=models.CASCADE, related_name='contato_imovel')
	# cliente = models.ForeignKey(Cliente, to_field='id', on_delete=models.CASCADE, related_name='contato_cliente')
	mensagem = models.TextField()

	objects = models.DjongoManager()


	class Meta:
		verbose_name = 'Contato do cliente'
		verbose_name_plural = 'Contatos dos clientes'
		app_label = 'panel'




class Categoria(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	ordem = models.IntegerField()
	nome = models.CharField(max_length=255)
	resumo = models.TextField()
	descricao = models.TextField()
	name = models.CharField(max_length=255)
	description = models.TextField()
	summary = models.TextField()
	imagem = models.ImageField(upload_to=upload_path_handler, blank=True, null=True, default=None)
	slug = models.CharField(max_length=255, blank=True, null=True, default=None)

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Categoria'
		verbose_name_plural = 'Categorias'
		app_label = 'panel'
  
	# def save(self, *args, **kwargs):
	# 	if not self.id:
	# 		print(f"Handle Initial")
	# 		self._handle_initial_save()
	# 	super().save(*args, **kwargs)
	
	# def _handle_initial_save(self):
	# 	"""Handle saving for new instances, setting the imagem to None first."""
	# 	if self.imagem:
	# 		print(f"Handle Initial with imagem field")
	# 		imagem = self.imagem
	# 		self.imagem = None
	# 		super(Categoria, self).save(force_insert=True)
	# 		if self.id:
	# 			print(str(self.id))
	# 			print(f"Handle Initial with imagem field - after super")
	# 			self.imagem = imagem
	# 			Categoria.objects.filter(id=self.id).update(imagem=imagem)
	# 			print(f"Handle Initial with imagem field - after update")




class Tag(models.Model):
    tag = models.CharField(max_length=255)
    
    class Meta:
        abstract = True
    
    def __str__(self):
        return self.tag


# class ConcreteTag(Tag):
    
#     _id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
    
#     class Meta:
#         verbose_name = 'Tag'
#         verbose_name_plural = 'Tags'
        
#     def save(self, *args, **kwargs):
#         self._id = None  # Ensure _id is not saved
#         super().save(*args, **kwargs)


class Post(models.Model):
    id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
    data = models.DateTimeField(default=datetime.now, blank=True)
    data_cadastro = models.DateTimeField(auto_now_add=True, editable=False)
    data_atualizacao = models.DateTimeField(auto_now=True, editable=False)
    titulo = models.CharField(max_length=255)
    subtitulo = models.CharField(max_length=255, blank=True)
    conteudo = models.TextField()
    imagem_principal = models.ImageField(upload_to=upload_path_handler, blank=True, null=True, default=None)
    # tags = models.ArrayField(model_container=ConcreteTag, blank=True, default=[])
    tags = models.JSONField(blank=True, default=list)  # Store tags as a list of strings
    categorias = models.ArrayReferenceField(to=Categoria)
    autor = models.ArrayReferenceField(to=Usuario)
    slug = models.CharField(max_length=255, blank=True, null=True, default=None)

    objects = models.DjongoManager()
    

    class Meta:
        verbose_name = 'Post'
        verbose_name_plural = 'Posts'
        app_label = 'panel'
        


class BannerMosaico(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	ordem = models.IntegerField()
	template = models.ImageField(upload_to=upload_path_handler, blank=True, null=True, default=None)
	posts = models.ArrayReferenceField(to=Post)

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Banner Mosaico'
		verbose_name_plural = 'Banners Mosaicos'
		app_label = 'panel'

	# def save(self, *args, **kwargs):
	# 	if not self.id:
	# 		self._handle_initial_save()
	# 	super().save(*args, **kwargs)
	
	# def _handle_initial_save(self):
	# 	"""Handle saving for new instances, setting the template to None first."""
	# 	if self.template:
	# 		template = self.template
	# 		self.template = None
	# 		super(BannerMosaico, self).save(force_insert=True)
	# 		self.template = template
	# 		self.save(update_fields=['template'])

class Simulacao(models.Model):	
	TIPO = (
		('renda_familiar', 'Renda Familiar'),
		('valor_parcelas', 'Valor Parcelas'),
	)
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	tipo = models.CharField(max_length=255, choices=TIPO)
	renda_familiar_mensal = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, default=None)
	valor_maximo_parcelas = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, default=None)
	entrada_disponivel = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, default=None)
	fgts = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, default=None)
	nome = models.CharField(max_length=255)
	email = models.EmailField()
	telefone = models.CharField(max_length=255)

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Simulação'
		verbose_name_plural = 'Simulações'
		app_label = 'panel'

class Assunto(models.Model):
    id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
    nome = models.CharField(max_length=255)
    email = models.EmailField()
    
    objects = models.DjongoManager()
    
    class Meta:
        verbose_name = 'Assunto'
        verbose_name_plural = 'Assuntos'
        app_label = 'panel'


class Contato(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	assunto = models.ArrayReferenceField(to=Assunto, on_delete=models.CASCADE, blank=True, null=True, default=[])
	nome = models.CharField(max_length=255)
	email = models.EmailField()
	telefone = models.CharField(max_length=255)
	estado = models.CharField(max_length=255)
	cidade = models.CharField(max_length=255)
	mensagem = models.TextField()
	whatsapp = models.BooleanField(default=False)
	news = models.BooleanField(default=False)
	rastreamento = models.JSONField(blank=True, null=True, default=[])
	tipo = models.CharField(max_length=255, choices=(('mensagem', 'Mensagem'), ('visita', 'Visita')), default='mensagem')
	imovel = models.ArrayReferenceField(to=PropertiesNested, to_field='property_id', on_delete=models.CASCADE, blank=True, null=True, default=[])
	cliente = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, blank=True, null=True, default=[])

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Contato'
		verbose_name_plural = 'Contatos'
		app_label = 'panel'

	# def save(self, *args, **kwargs):
	# 	# Ensure that self.assunto is a list of ObjectIds or None
	# 	if self.assunto:
	# 		# Convert each item in self.assunto to ObjectId if it's not already
	# 		self.assunto = [ObjectId(assunto_id) if not isinstance(assunto_id, ObjectId) else assunto_id for assunto_id in self.assunto]
	# 	super().save(*args, **kwargs)

class Imprensa(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	texto = models.TextField()

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Imprensa'
		verbose_name_plural = 'Imprensa'
		app_label = 'panel'
  

class AssuntoOuvidoria(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	nome = models.CharField(max_length=255)
	email = models.EmailField()

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Assunto Ouvidoria'
		verbose_name_plural = 'Assuntos Ouvidoria'
		app_label = 'panel'

class Ouvidoria(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	assunto = models.ArrayReferenceField(AssuntoOuvidoria, on_delete=models.CASCADE)
	nome = models.CharField(max_length=255)
	email = models.EmailField()
	telefone = models.CharField(max_length=255)
	estado = models.CharField(max_length=255)
	cidade = models.CharField(max_length=255)
	mensagem = models.TextField()

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Ouvidoria'
		verbose_name_plural = 'Ouvidoria'
		app_label = 'panel'


class GrupoPerguntaFrequente(models.Model):
    id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
    ordem = models.IntegerField()
    nome = models.CharField(max_length=255)
    
    objects = models.DjongoManager()
    
    class Meta:
        verbose_name = 'Grupo de perguntas frequentes'
        verbose_name_plural = 'Grupos de perguntas frequentes'
        app_label = 'panel'


class PerguntaFrequente(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	ordem = models.IntegerField()
	grupo = models.ArrayReferenceField(to=GrupoPerguntaFrequente, on_delete=models.CASCADE)
	pergunta = models.CharField(max_length=255)
	resposta = models.TextField()

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Pergunta frequente'
		verbose_name_plural = 'Perguntas frequentes'
		app_label = 'panel'

class PorqueRemax(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	texto = models.TextField()
 
	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Porque a RE/MAX'
		verbose_name_plural = 'Porque a RE/MAX'
		app_label = 'panel'

class RemaxNoBrasil(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	texto_simplificado = models.TextField()
	texto = models.TextField()
	agencias = models.ArrayReferenceField(to=Offices, to_field='office_id')
	corretores = models.ArrayReferenceField(to=Agents, to_field='agent_id')
	imoveis_exclusivos = models.ArrayReferenceField(to=PropertiesNested, to_field='property_id')

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'RE/MAX no Brasil'
		verbose_name_plural = 'RE/MAX no Brasil'
		app_label = 'panel'

class Reconhecimento(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	ordem = models.IntegerField()
	selo = models.CharField(max_length=255)
	titulo = models.CharField(max_length=255)
	status = models.BooleanField()

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Reconhecimento'
		verbose_name_plural = 'Reconhecimentos'	
		app_label = 'panel'

class RemaxNoMundo(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	texto_simplificado = models.TextField()
	texto = models.TextField()

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'RE/MAX no Mundo'
		verbose_name_plural = 'RE/MAX no Mundo'
		app_label = 'panel'

class Universidade(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	texto = models.TextField()

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Universidade'
		verbose_name_plural = 'Universidade'
		app_label = 'panel'

class Parceiro(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	texto = models.TextField()
 
	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Parceiro'
		verbose_name_plural = 'Parceiros'
		app_label = 'panel'

class RelacaoInvestidor(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	texto = models.TextField()

	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Relação com investidores'
		verbose_name_plural = 'Relação com investidores'
		app_label = 'panel'
  
  
  
class EstadoDetalhe(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	estado_id = models.ArrayReferenceField(to=State, to_field='state_id', db_column='estado_id', on_delete=models.CASCADE)
	texto = models.TextField()
	imagem = models.ImageField(upload_to=upload_path_handler, blank=True, null=True, default=None)
	created_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='estado_detalhe_created', db_column='created_by')
	updated_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='estado_detalhe_updated', db_column='updated_by')
	created_at = models.DateTimeField(auto_now_add=True, editable=False)
	updated_at = models.DateTimeField(auto_now=True, editable=False)
	
	objects = models.DjongoManager()
 
	def __str__(self):
		# get estado name from State model
		estado = self.estado_id.all().first()
		return f"{estado.state_name} - {estado.state_abbreviation}"
	
	class Meta:
		verbose_name = 'Estado Detalhe'
		verbose_name_plural = 'Estados Detalhe'
		app_label = 'panel'
		db_table = 'panel_estadodetalhe'

class CidadeDetalhe(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	texto = models.TextField()
	imagem = models.ImageField(upload_to=upload_path_handler, blank=True, null=True, default=None)
	cidade_id = models.ArrayReferenceField(to=City, to_field='city_id', db_column='cidade_id', on_delete=models.CASCADE)
	created_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='cidade_detalhe_created', db_column='created_by')
	updated_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='cidade_detalhe_updated', db_column='updated_by')
	created_at = models.DateTimeField(auto_now_add=True, editable=False)
	updated_at = models.DateTimeField(auto_now=True, editable=False)
 
	objects = models.DjongoManager()
 
	def __str__(self):
		cidade = City.objects.get(city_id=self.cidade_id)
		return f"{cidade.city_name} - {cidade.state_abbreviation}"
 
	class Meta:
		verbose_name = 'Cidade Detalhe'
		verbose_name_plural = 'Cidades Detalhe'
		app_label = 'panel'
		db_table = 'panel_cidadedetalhe'
  
  
class BairroDetalhe(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	texto = models.TextField()
	imagem = models.ImageField(upload_to=upload_path_handler, blank=True, null=True, default=None)
	bairro_id = models.ArrayReferenceField(to=Neighborhood, to_field='neighborhood_id', db_column='bairro_id', on_delete=models.CASCADE)
	created_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='bairro_detalhe_created', db_column='created_by')
	updated_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='bairro_detalhe_updated', db_column='updated_by')
	created_at = models.DateTimeField(auto_now_add=True, editable=False)
	updated_at = models.DateTimeField(auto_now=True, editable=False)
 
	objects = models.DjongoManager()
 
	def __str__(self):
		bairro = Neighborhood.objects.get(neighborhood_id=self.bairro_id)
		return f"{bairro.neighborhood_name} - {bairro.city_name} - {bairro.state_abbreviation}"
 
	class Meta:
		verbose_name = 'Bairro Detalhe'
		verbose_name_plural = 'Bairros Detalhe'
		db_table = 'panel_bairrodetalhe'
		app_label = 'panel'
	
	

  
class Documentacao(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	texto = models.TextField()
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Documentação'
		verbose_name_plural = 'Documentação'
		app_label = 'panel'


class Construtora(models.Model):
    id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
    nome = models.CharField(max_length=255)
    descricao = models.TextField()
    status = models.BooleanField(default=True)
    logo = models.ImageField(upload_to=upload_path_handler, blank=True, null=True, default=None)
    slug = models.CharField(max_length=255, blank=True, null=True, default=None)
    
    objects = models.DjongoManager()
    
    def __str__(self):
        return self.nome
    
    class Meta:
        verbose_name = 'Construtora'
        verbose_name_plural = 'Construtoras'
        app_label = 'panel'
    
    

class PoliticaPrivacidadeTexto(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	texto = models.TextField()
	data_cadastro = models.DateTimeField(auto_now_add=True, editable=False)
	data_atualizacao = models.DateTimeField(auto_now=True, editable=False)
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Texto da Política de Privacidade'
		verbose_name_plural = 'Texto da Política de Privacidade'
		app_label = 'panel'


class TermosDeUso(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	content = models.TextField()
	user_create = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='termosdeuso_created')
	user_update = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='termosdeuso_updated')
	created_at = models.DateTimeField(auto_now_add=True, editable=False)
	updated_at = models.DateTimeField(auto_now=True, editable=False)
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Termos de Uso'
		verbose_name_plural = 'Termos de Uso'
		app_label = 'panel'

class LancamentoCaracteristicas(models.Model):
    id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
    caracteristica_id = models.IntegerField(db_column='feature_id')
    caracteristica_pt = models.CharField(max_length=255, db_column='feature_name_pt')
    caracteristica_en = models.CharField(max_length=255, db_column='feature_name_en')
    
    objects = models.DjongoManager()
    
    class Meta:
        verbose_name = 'Lançamento - Característica'
        verbose_name_plural = 'Lançamento - Características'
        app_label = 'panel'
        managed = False
        db_table = 'v1_features'


class BannerPublicidade(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	ordem = models.IntegerField()
	descricao = models.CharField(max_length=255)
	imagem_desktop = models.ImageField(upload_to=upload_path_handler)
	imagem_mobile = models.ImageField(upload_to=upload_path_handler)
	link = models.URLField()
	nova_aba = models.BooleanField(default=False)
	status = models.CharField(max_length=255, choices=(('Ativo', 'Ativo'), ('Inativo', 'Inativo')))
	data_inicio = models.DateTimeField()
	data_termino = models.DateTimeField()
	exibir_geral = models.BooleanField(default=False)
	exibir_todas_cidades_do_estado = models.BooleanField(default=False)
	estado_id = models.ArrayReferenceField(to=State, to_field='state_id', on_delete=models.CASCADE, db_column='estado_id')
	cidade_id = models.ArrayReferenceField(to=City, to_field='city_id', on_delete=models.CASCADE, db_column='cidade_id')
	created_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='banner_publicidade_created', db_column='created_by')
	updated_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='banner_publicidade_updated', db_column='updated_by')
	created_at = models.DateTimeField(auto_now_add=True, editable=False)
	updated_at = models.DateTimeField(auto_now=True, editable=False)
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Banner de Publicidade'
		verbose_name_plural = 'Banners de Publicidade'
		app_label = 'panel'


############################################################################

class Lancamento(models.Model):
    id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
    nome_do_empreendimento = models.CharField(max_length=255)
    logo = models.ImageField(upload_to=upload_path_handler, blank=True, null=True, default=None)
    descricao = models.TextField(blank=True, null=True, default=None)
    endereco = models.CharField(max_length=255, blank=True, null=True, default=None)
    pais = models.CharField(max_length=255, default='Brasil', blank=False, null=False)
    #latitude = models.CharField(max_length=255, blank=True, null=True, default=None)
    #longitude = models.CharField(max_length=255, blank=True, null=True, default=None)
    latitude = models.FloatField(blank=True, null=True, default=None)
    longitude = models.FloatField(blank=True, null=True, default=None)
    estagio_de_obra = models.CharField(max_length=255, choices=(('Lançamento', 'Lançamento'), ('Em obras', 'Em obras'), ('Pronto', 'Pronto')))
    bairro_id = models.ArrayReferenceField(to=Neighborhood, to_field='neighborhood_id', db_column='bairro_id', on_delete=models.CASCADE)
    cidade_id = models.ArrayReferenceField(to=City, to_field='city_id', db_column='cidade_id', on_delete=models.CASCADE)
    estado_id = models.ArrayReferenceField(to=State, to_field='state_id', db_column='estado_id', on_delete=models.CASCADE)
    caracteristicas_id = models.ArrayReferenceField(to=Features, to_field='feature_id', db_column='caracteristicas_id')
    construtora_id = models.ArrayReferenceField(to=Construtora, db_column='construtora_id', on_delete=models.CASCADE)
    video = models.URLField(blank=True, null=True, default=None)
    created_by = models.ArrayReferenceField(to=Usuario, related_name='lancamento_created', db_column='created_by', on_delete=models.CASCADE)
    updated_by = models.ArrayReferenceField(to=Usuario, related_name='lancamento_updated', db_column='updated_by', on_delete=models.CASCADE)
    created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
    updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
    slug = models.CharField(max_length=255, blank=True, null=True, default=None)
    slogan = models.CharField(max_length=255, blank=True, null=True, default=None)
    banheiros = models.JSONField(blank=True, null=True, default=[])
    quartos = models.JSONField(blank=True, null=True, default=[])
    vagas = models.JSONField(blank=True, null=True, default=[])
    preco = models.JSONField(blank=True, null=True, default=[])
    area = models.JSONField(blank=True, null=True, default=[])



    objects = models.DjongoManager()

    class Meta:
        verbose_name = 'Lançamento'
        verbose_name_plural = 'Lançamentos'
        app_label = 'panel'

  

class LancamentoImagem(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	ordem = models.IntegerField()
	imagem = models.ImageField(upload_to=upload_path_handler)
	titulo = models.CharField(max_length=255, blank=True, null=True, default=None)
	principal = models.BooleanField(default=False)
	lancamento_id = models.ArrayReferenceField(to=Lancamento, on_delete=models.CASCADE, db_column='lancamento_id')
	created_by = models.ArrayReferenceField(to=Usuario, related_name='foto_lancamento_created', db_column='created_by', on_delete=models.CASCADE)
	updated_by = models.ArrayReferenceField(to=Usuario, related_name='foto_lancamento_updated', db_column='updated_by', on_delete=models.CASCADE)
	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Lançamento - Imagem'
		verbose_name_plural = 'Lançamento - Imagens'
		app_label = 'panel'

# class LancamentoPlanta(models.Model):
# 	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
# 	ordem = models.IntegerField()
# 	imagem = models.ImageField(upload_to=upload_path_handler)
# 	titulo = models.CharField(max_length=255, blank=True, null=True, default=None)
# 	lancamento_id = models.ArrayReferenceField(to=Lancamento, db_column='lancamento_id', on_delete=models.CASCADE)
# 	created_by = models.ArrayReferenceField(to=Usuario, related_name='planta_created', db_column='created_by', on_delete=models.CASCADE)
# 	updated_by = models.ArrayReferenceField(to=Usuario, related_name='planta_updated', db_column='updated_by', on_delete=models.CASCADE)
# 	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
# 	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	
# 	objects = models.DjongoManager()
	
# 	class Meta:
# 		verbose_name = 'Lançamento - Planta'
# 		verbose_name_plural = 'Lançamnento - Plantas'
# 		app_label = 'panel'

class LancamentoPlanta(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	codigo = models.CharField(max_length=255, blank=True, null=True, default=None)
	descricao = models.TextField(blank=True, null=True, default=None)
	quartos = models.IntegerField(blank=True, null=True, default=None)
	vagas = models.IntegerField(blank=True, null=True, default=None)
	banheiros = models.IntegerField(blank=True, null=True, default=None)
	area = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, default=None)
	preco = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, default=None)
	status = models.CharField(max_length=255, choices=(('disponivel', 'disponivel'), ('vendido', 'vendido')), default='disponivel')
	#planta_id = models.ArrayReferenceField(to=LancamentoPlanta, db_column='planta_id', on_delete=models.CASCADE)
	lancamento_id = models.ArrayReferenceField(to=Lancamento, db_column='lancamento_id', on_delete=models.CASCADE)
	created_by = models.ArrayReferenceField(to=Usuario, related_name='unidade_created', db_column='created_by', on_delete=models.CASCADE)
	updated_by = models.ArrayReferenceField(to=Usuario, related_name='unidade_updated', db_column='updated_by', on_delete=models.CASCADE)
	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	slug = models.CharField(max_length=255, blank=True, null=True, default=None)
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Lançamento - Planta'
		verbose_name_plural = 'Lançamento - Plantas'
		app_label = 'panel'

class LancamentoPlantaImagem(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	ordem = models.IntegerField()
	imagem = models.ImageField(upload_to=upload_path_handler)
	titulo = models.CharField(max_length=255, blank=True, null=True, default=None)
	principal = models.BooleanField(default=False)
	planta_id = models.ArrayReferenceField(to=LancamentoPlanta, db_column='planta_id', on_delete=models.CASCADE)
	created_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='foto_unidade_created', db_column='created_by')
	updated_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='foto_unidade_updated', db_column='updated_by')
	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Lançamento - Planta - Imagem da Planta do Lançamento'
		verbose_name_plural = 'Lançamento - Planta - Imagens'
		app_label = 'panel'


class AgenciaBanner(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	ordem = models.IntegerField()
	descricao = models.CharField(max_length=255)
	imagem = models.ImageField(upload_to=upload_path_handler)
	link = models.URLField()
	nova_janela = models.BooleanField()
	status = models.CharField(max_length=255, choices=(('Ativo', 'Ativo'), ('Inativo', 'Inativo')))
	agencia_id = models.ArrayReferenceField(to=Offices, to_field='office_id', db_column='agencia_id')
	created_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='agencia_banner_created', db_column='created_by')
	updated_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='agencia_banner_updated', db_column='updated_by')
	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Banner da Agência'
		verbose_name_plural = 'Banners das Agências'
		app_label = 'panel'
  
  
class ContatoDireto(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	nome = models.CharField(max_length=255)
	email = models.EmailField()
	telefone = models.CharField(max_length=255)
	tipo = models.CharField(max_length=255, choices=(('mensagem', 'Mensagem'), ('visita', 'Visita')))
	mensagem = models.TextField()
	whatsapp = models.BooleanField(default=False)
	news = models.BooleanField(default=False)
	rastreamento = models.JSONField(blank=True, null=True, default=[])
	cliente_id = models.ArrayReferenceField(to=Usuario, db_column='cliente_id', on_delete=models.CASCADE, blank=True, null=True, default=None)
	imovel_id = models.ArrayReferenceField(to=PropertiesNested, db_column='imovel_id', on_delete=models.CASCADE, blank=True, null=True, default=None)
	agent_id = models.ArrayReferenceField(to=Agents, to_field='agent_id', db_column='agent_id', on_delete=models.CASCADE, blank=True, null=True, default=None)
	office_id = models.ArrayReferenceField(to=Offices, to_field='office_id', db_column='office_id', on_delete=models.CASCADE, blank=True, null=True, default=None)
	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	cidade_id = models.ArrayReferenceField(to=City, to_field='city_id', on_delete=models.CASCADE, db_column='cidade_id')
	estado_id = models.ArrayReferenceField(to=State, to_field='state_id', on_delete=models.CASCADE, db_column='estado_id')
 
	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Contato Direto'
		verbose_name_plural = 'Contatos Direto'
		app_label = 'panel'
  


class Anuncie(models.Model):
    

	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	nome = models.CharField(max_length=255)
	email = models.EmailField()
	telefone = models.CharField(max_length=255)
	tipo_imovel = models.CharField(max_length=255)
	quartos = models.IntegerField()
	objetivo = models.IntegerField()
	sobre_imovel = models.TextField()
	bairro_id = models.ArrayReferenceField(to=Neighborhood, to_field='neighborhood_id', on_delete=models.CASCADE, db_column='bairro_id')
	cidade_id = models.ArrayReferenceField(to=City, to_field="city_id", on_delete=models.CASCADE, db_column='cidade_id')
	estado_id = models.ArrayReferenceField(to=State, to_field="state_id", on_delete=models.CASCADE, db_column='estado_id')
	office_id = models.ArrayReferenceField(to=Offices, to_field='office_id', db_column='office_id', on_delete=models.CASCADE, blank=True, null=True, default=None)
	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])

 
	objects = models.DjongoManager()

	class Meta:
		verbose_name = 'Anuncie'
		verbose_name_plural = 'Anuncie'
		app_label = 'panel'

############################################################################
########################## NESTED MODELS ###################################
############################################################################

class LancamentoNested(models.Model):
    
    id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
    nome_do_empreendimento = models.CharField(max_length=255)
    logo = models.ImageField(upload_to=upload_path_handler, blank=True, null=True, default=None)
    descricao = models.TextField(blank=True, null=True, default=None)
    endereco = models.CharField(max_length=255, blank=True, null=True, default=None)
    pais = models.CharField(max_length=255, default='Brasil', blank=False, null=False)
    #latitude = models.CharField(max_length=255, blank=True, null=True, default=None)
    #longitude = models.CharField(max_length=255, blank=True, null=True, default=None)
    latitude = models.FloatField(blank=True, null=True, default=None)
    longitude = models.FloatField(blank=True, null=True, default=None)
    estagio_de_obra = models.CharField(max_length=255, choices=(('Lançamento', 'Lançamento'), ('Em obras', 'Em obras'), ('Pronto', 'Pronto')))
    lancamento_id = models.JSONField(blank=True, null=True, default=[], db_column='lancamento_id', unique=True)
    bairro = models.JSONField(blank=True, null=True, default=[], db_column='bairro')
    cidade = models.JSONField(blank=True, null=True, default=[], db_column='cidade')
    estado = models.JSONField(blank=True, null=True, default=[], db_column='estado')
    caracteristicas = models.JSONField(blank=True, null=True, default=[], db_column='caracteristicas')
    fotos = models.JSONField(blank=True, null=True, default=[], db_column='fotos')
    plantas = models.JSONField(blank=True, null=True, default=[], db_column='plantas')
    created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
    updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])

    objects = models.DjongoManager()

    class Meta:
        verbose_name = 'Lançamento Nested'
        verbose_name_plural = 'Lançamentos Nested'
        app_label = 'panel'


class LancamentoUnidadeNested(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	codigo = models.CharField(max_length=255, blank=True, null=True, default=None)
	descricao = models.TextField(blank=True, null=True, default=None)
	quartos = models.IntegerField(blank=True, null=True, default=None)
	vagas = models.IntegerField(blank=True, null=True, default=None)
	banheiros = models.IntegerField(blank=True, null=True, default=None)
	area = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, default=None)
	preco = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, default=None)
	status = models.CharField(max_length=255, choices=(('disponivel', 'disponivel'), ('vendido', 'vendido')), default='disponivel')
	lancamento_unidade_id = models.JSONField(blank=True, null=True, default=[], db_column='lancamento_unidade_id', unique=True)
	planta = models.JSONField(blank=True, null=True, default=[], db_column='planta')
	lancamento = models.JSONField(blank=True, null=True, default=[], db_column='lancamento')
	fotos = models.JSONField(blank=True, null=True, default=[], db_column='fotos')
	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Lançamento - Unidade'
		verbose_name_plural = 'Lançamento - Unidades'
		app_label = 'panel'
  
  
  #### Email Settings ####
  
class EmailSettings(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	email = models.EmailField()
	smtp_server = models.CharField(max_length=255)
	smtp_port = models.IntegerField()
	smtp_user = models.CharField(max_length=255)
	smtp_password = models.CharField(max_length=255)
	smtp_ssl = models.BooleanField()
	smtp_tls = models.BooleanField()
	smtp_from = models.EmailField()
	smtp_from_name = models.CharField(max_length=255)
	smtp_reply_to = models.EmailField()
	smtp_reply_to_name = models.CharField(max_length=255)
	smtp_test = models.BooleanField()
	smtp_test_email = models.EmailField()
	smtp_test_subject = models.CharField(max_length=255)
	smtp_test_message = models.TextField()
 
	# Using upload_path_handler for the paths
	header_image = models.ImageField(upload_to=upload_path_handler, null=True, blank=True)
	footer_image = models.ImageField(upload_to=upload_path_handler, null=True, blank=True)
 
	# Automatic timestamps
	created_at = models.DateTimeField(auto_now_add=True, editable=False)
	updated_at = models.DateTimeField(auto_now=True, editable=False)
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Configurações de Email'
		verbose_name_plural = 'Configurações de Email'
		app_label = 'panel'

	def __str__(self):
		return f"Email Settings ({self.smtp_user})"


# class Lancamento(models.Model):
#     id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
#     nome_do_empreendimento = models.CharField(max_length=255)
#     logo = models.ImageField(upload_to=upload_path_handler, blank=True, null=True, default=None)
#     descricao = models.TextField(blank=True, null=True, default=None)
#     endereco = models.CharField(max_length=255, blank=True, null=True, default=None)
#     pais = models.CharField(max_length=255, default='Brasil', blank=False, null=False)
#     latitude = models.CharField(max_length=255, blank=True, null=True, default=None)
#     longitude = models.CharField(max_length=255, blank=True, null=True, default=None)
#     estagio_de_obra = models.CharField(max_length=255, choices=(('Lançamento', 'Lançamento'), ('Em obras', 'Em obras'), ('Pronto', 'Pronto')))
    
#     created_by = models.JSONField(blank=True, null=True, default=[], db_column='created_by')
#     updated_by = models.JSONField(blank=True, null=True, default=[], db_column='updated_by')
#     bairro = models.JSONField(blank=True, null=True, default=[], db_column='bairro')
#     cidade = models.JSONField(blank=True, null=True, default=[], db_column='cidade')
#     estado = models.JSONField(blank=True, null=True, default=[], db_column='estado')
#     caracteristicas = models.JSONField(blank=True, null=True, default=[], db_column='caracteristicas')
#     fotos = models.JSONField(blank=True, null=True, default=[], db_column='fotos')
#     plantas = models.JSONField(blank=True, null=True, default=[], db_column='plantas')
#     created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
#     updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])

#     objects = models.DjongoManager()

#     class Meta:
#         verbose_name = 'Lançamento'
#         verbose_name_plural = 'Lançamentos'
#         app_label = 'panel'
  

# class FotoLancamento(models.Model):
# 	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
# 	ordem = models.IntegerField()
# 	imagem = models.ImageField(upload_to=upload_path_handler)
# 	#lancamento_id = models.ArrayReferenceField(to=Lancamento, on_delete=models.CASCADE, db_column='lancamento_id')
# 	lancamento_id = models.JSONField(blank=True, null=True, default=[], db_column='lancamento_id')
# 	created_by = models.JSONField(blank=True, null=True, default=[], db_column='created_by')
# 	updated_by = models.JSONField(blank=True, null=True, default=[], db_column='updated_by')
# 	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=None)
# 	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=None)
	
# 	objects = models.DjongoManager()
	
# 	class Meta:
# 		verbose_name = 'Lançamento - Foto'
# 		verbose_name_plural = 'Lançamentos - Fotos'
# 		app_label = 'panel'

# class PlantaLancamento(models.Model):
# 	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
# 	ordem = models.IntegerField()
# 	imagem = models.ImageField(upload_to=upload_path_handler)
# 	#lancamento_id = models.ArrayReferenceField(to=Lancamento, on_delete=models.CASCADE, db_column='lancamento_id')
# 	lancamento_id = models.JSONField(blank=True, null=True, default=[], db_column='lancamento_id')
# 	created_by = models.JSONField(blank=True, null=True, default=[], db_column='created_by')
# 	updated_by = models.JSONField(blank=True, null=True, default=[], db_column='updated_by')
# 	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=None)
# 	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=None)
	
# 	objects = models.DjongoManager()
	
# 	class Meta:
# 		verbose_name = 'Lançamento - Planta'
# 		verbose_name_plural = 'Lançamnentos - Plantas'
# 		app_label = 'panel'

# class UnidadeLancamento(models.Model):
# 	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
# 	codigo = models.CharField(max_length=255, blank=True, null=True, default=None)
# 	descricao = models.TextField(blank=True, null=True, default=None)
# 	quartos = models.IntegerField(blank=True, null=True, default=None)
# 	vagas = models.IntegerField(blank=True, null=True, default=None)
# 	banheiros = models.IntegerField(blank=True, null=True, default=None)
# 	area = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, default=None)
# 	preco = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True, default=None)
# 	status = models.CharField(max_length=255, choices=(('disponivel', 'disponivel'), ('vendido', 'vendido')), default='disponivel')
 
# 	#planta_id = models.ArrayReferenceField(to=PlantasLancamento, on_delete=models.CASCADE, db_column='planta_id')
# 	#lancamento_id = models.ArrayReferenceField(to=Lancamento, on_delete=models.CASCADE)
# 	# user_create = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='unidades_created')
# 	# user_update = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='unidades_updated')
# 	# created_at = models.DateTimeField(auto_now_add=True, editable=False)
# 	# updated_at = models.DateTimeField(auto_now=True, editable=False)

# 	planta = models.JSONField(blank=True, null=True, default=[], db_column='planta')
# 	lancamento = models.JSONField(blank=True, null=True, default=[], db_column='lancamento')
# 	fotos = models.JSONField(blank=True, null=True, default=[], db_column='fotos')
# 	created_by = models.JSONField(blank=True, null=True, default=[], db_column='created_by')
# 	updated_by = models.JSONField(blank=True, null=True, default=[], db_column='updated_by')
# 	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=None)
# 	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=None)
	
# 	objects = models.DjongoManager()
	
# 	class Meta:
# 		verbose_name = 'Lançamento - Unidade'
# 		verbose_name_plural = 'Lançamento - Unidades'
# 		app_label = 'panel'

# class FotoUnidadeLancamento(models.Model):
# 	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
# 	ordem = models.IntegerField()
# 	imagem = models.ImageField(upload_to=upload_path_handler)
# 	#unidade_id = models.ArrayReferenceField(to=UnidadesLancamento, on_delete=models.CASCADE, db_column='unidade_id')
# 	unidade_id = models.JSONField(blank=True, null=True, default=[], db_column='unidade_id')
# 	created_by = models.JSONField(blank=True, null=True, default=[], db_column='created_by')
# 	updated_by = models.JSONField(blank=True, null=True, default=[], db_column='updated_by')
# 	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=None)
# 	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=None)
	
# 	objects = models.DjongoManager()
	
# 	class Meta:
# 		verbose_name = 'Lançamento - Unidade - FotoFoto da Unidade do Lançamento'
# 		verbose_name_plural = 'Lançamento - Unidade - Fotos'
# 		app_label = 'panel'


# class AgenciaBanner(models.Model):
# 	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
# 	ordem = models.IntegerField()
# 	descricao = models.CharField(max_length=255)
# 	imagem = models.ImageField(upload_to=upload_path_handler)
# 	link = models.URLField()
# 	nova_janela = models.BooleanField()
# 	status = models.CharField(max_length=255, choices=(('Ativo', 'Ativo'), ('Inativo', 'Inativo')))
# 	#agencia_id = models.ArrayReferenceField(to=Offices, on_delete=models.CASCADE, db_column='agencia_id')
# 	agencia = models.JSONField(blank=True, null=True, default=[], db_column='agencia')
# 	created_by = models.JSONField(blank=True, null=True, default=[], db_column='created_by')
# 	updated_by = models.JSONField(blank=True, null=True, default=[], db_column='updated_by')
# 	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=None)
# 	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=None)
	
# 	objects = models.DjongoManager()
	
# 	class Meta:
# 		verbose_name = 'Banner da Agência'
# 		verbose_name_plural = 'Banners das Agências'
# 		app_label = 'panel'

############################################################################

# register query_params to a user
class QueryParamsUser(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	user_id = models.ArrayReferenceField(to=Usuario, db_column='user_id', on_delete=models.CASCADE)
	query_params = models.JSONField(blank=True, null=True, default=[], db_column='query_params')
	url = models.CharField(max_length=255, blank=True, null=True, default=None)
	origin = models.CharField(max_length=255, blank=True, null=True, default=None)
	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	updated_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Query Params User'
		verbose_name_plural = 'Query Params User'
		app_label = 'panel'
		ordering = ['-created_at']
  
  


############################################################################

# register query_params
class QueryParamsGeneral(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	query_params = models.JSONField(blank=True, null=True, default=[], db_column='query_params')
	url = models.CharField(max_length=255, blank=True, null=True, default=None)
	origin = models.CharField(max_length=255, blank=True, null=True, default=None)
	created_at = models.DateTimeField(editable=False, null=True, blank=True, default=[])
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Query Params General'
		verbose_name_plural = 'Query Params General'
		app_label = 'panel'
		ordering = ['-created_at']
  


############################################################################
class NossaHistoria(models.Model):
	"""
	NossaHistoria model represents the history of the organization with multilingual support.
	Attributes:
		id (ObjectIdField): Primary key, non-editable.
		ano (PositiveIntegerField): Year of the event.
		texto (TextField): Description of the event in Portuguese.
		titulo (CharField): Title of the event in Portuguese.
		texto_en (TextField): Description of the event in English.
		titulo_en (CharField): Title of the event in English.
		created_by (ArrayReferenceField): Reference to the user who created the record.
		updated_by (ArrayReferenceField): Reference to the user who last updated the record.
		created_at (DateTimeField): Timestamp when the record was created, non-editable.
		updated_at (DateTimeField): Timestamp when the record was last updated, non-editable.
	Meta:
		verbose_name (str): Human-readable singular name of the model.
		verbose_name_plural (str): Human-readable plural name of the model.
		app_label (str): Name of the app the model belongs to.
		ordering (list): Default ordering for the model.
	"""
    
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	ano = models.PositiveIntegerField()
	texto = models.TextField()
	titulo = models.CharField(max_length=255)
	texto_en = models.TextField(blank=True, null=True, default=None)
	titulo_en = models.CharField(max_length=255, blank=True, null=True, default=None)
	created_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='nossa_historia_created', db_column='created_by')
	updated_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='nossa_historia_updated', db_column='updated_by')
	created_at = models.DateTimeField(auto_now_add=True, editable=False, db_column='created_at', null=True, blank=True)
	updated_at = models.DateTimeField(auto_now=True, editable=False, db_column='updated_at', null=True, blank=True)
 
	#created_by, created_at must be get automatically according to the logged user
	#created_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='nossa_historia_created')
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'Nossa História'
		verbose_name_plural = 'Nossa História'
		app_label = 'panel'
		ordering = ['ano']
  
  
############################################################################

class Pagina(models.Model):
    id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
    titulo = models.CharField(max_length=255)
    slug = models.CharField(max_length=255)
    conteudo = models.TextField()
    created_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='pagina_created', db_column='created_by')
    updated_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='pagina_updated', db_column='updated_by')
    created_at = models.DateTimeField(auto_now_add=True, editable=False, db_column='created_at')
    updated_at = models.DateTimeField(auto_now=True, editable=False, db_column='updated_at')
    
    objects = models.DjongoManager()
    
    class Meta:
        verbose_name = 'Página'
        verbose_name_plural = 'Páginas'
        app_label = 'panel'
        ordering = ['titulo']
    
    def __str__(self):
        return f"{self.titulo} - {self.slug}"

############################################################################

class SEOTag(models.Model):
	id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
	titulo = models.CharField(max_length=255)
	descricao = models.TextField()
	created_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='seo_tags_created', db_column='created_by')
	updated_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='seo_tags_updated', db_column='updated_by')
	created_at = models.DateTimeField(auto_now_add=True, editable=False, db_column='created_at')
	updated_at = models.DateTimeField(auto_now=True, editable=False, db_column='updated_at')
	
	objects = models.DjongoManager()
	
	class Meta:
		verbose_name = 'SEO Tag'
		verbose_name_plural = 'SEO Tags'
		app_label = 'panel'
		ordering = ['titulo']

	def __str__(self):
		return f"{self.titulo}"



class SEOPagina(models.Model):
    id = models.ObjectIdField(db_column='_id', primary_key=True, editable=False)
    pagina = models.ArrayReferenceField(to=Pagina, on_delete=models.CASCADE, db_column='pagina_id')
    seo_tag = models.ArrayReferenceField(to=SEOTag, on_delete=models.CASCADE, db_column='seo_tag_id')
    seo_conteudo = models.TextField()
    cidade = models.ArrayReferenceField(to=City, to_field='city_id', db_column='cidade_id', default=[], blank=True, null=True, on_delete=models.CASCADE)
    idioma = models.CharField(max_length=255, choices=(('pt-br', 'pt-br'), ('en', 'en')), default=None, blank=True, null=True)
    created_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='seo_pagina_created', db_column='created_by')
    updated_by = models.ArrayReferenceField(to=Usuario, on_delete=models.CASCADE, related_name='seo_pagina_updated', db_column='updated_by')
    created_at = models.DateTimeField(auto_now_add=True, editable=False, db_column='created_at')
    updated_at = models.DateTimeField(auto_now=True, editable=False, db_column='updated_at')
    
    objects = models.DjongoManager()
    
    class Meta:
        verbose_name = 'SEO Página'
        verbose_name_plural = 'SEO Páginas'
        app_label = 'panel'
        ordering = ['pagina']
    
    def __str__(self):
        pagina = Pagina.objects.get(id__in=self.pagina.all())
        seo_tag = SEOTag.objects.get(id__in=self.seo_tag.all())
        cidade = self.cidade.all().first()
        if cidade:
            cidade = City.objects.get(city_id=cidade.city_id)
        if cidade:
            return f"{pagina.titulo} - {seo_tag.titulo} - {cidade.city_name}"
        else:
            return f"{pagina.titulo} - {seo_tag.titulo}"

