# -*- coding: utf-8 -*-
from core.utils.db import db
from core.utils.packages.session import BackupOnDeleteMixin
from sqlalchemy.orm import backref
from sqlalchemy import BigInteger
from datetime import datetime, timezone 
from sqlalchemy import desc, func, String, case, literal_column  
from sqlalchemy.ext.hybrid import hybrid_property 
from sqlalchemy.sql.expression import null 

class Propertylocation(db.Model, BackupOnDeleteMixin):
    __tablename__ = 'propertylocation'
    id = db.Column(db.Integer, primary_key=True)
    backgroundImage_id = db.Column(db.Integer, db.ForeignKey('blob.id'), nullable=True)
    backgroundImage = db.relationship('Blob', foreign_keys=[backgroundImage_id], lazy='joined')
    description = db.Column(db.Text())
    featureInHome = db.Column(db.Boolean())
    image1_id = db.Column(db.Integer, db.ForeignKey('blob.id'), nullable=True)
    image1 = db.relationship('Blob', foreign_keys=[image1_id], lazy='joined')
    image2_id = db.Column(db.Integer, db.ForeignKey('blob.id'), nullable=True)
    image2 = db.relationship('Blob', foreign_keys=[image2_id], lazy='joined')
    image3_id = db.Column(db.Integer, db.ForeignKey('blob.id'), nullable=True)
    image3 = db.relationship('Blob', foreign_keys=[image3_id], lazy='joined')
    image4_id = db.Column(db.Integer, db.ForeignKey('blob.id'), nullable=True)
    image4 = db.relationship('Blob', foreign_keys=[image4_id], lazy='joined')
    image5_id = db.Column(db.Integer, db.ForeignKey('blob.id'), nullable=True)
    image5 = db.relationship('Blob', foreign_keys=[image5_id], lazy='joined')
    image6_id = db.Column(db.Integer, db.ForeignKey('blob.id'), nullable=True)
    image6 = db.relationship('Blob', foreign_keys=[image6_id], lazy='joined')
    name = db.Column(db.String(255))
    parent_id = db.Column(db.Integer, db.ForeignKey('propertylocation.id', ondelete='SET NULL'), nullable=True)
    parent = db.relationship('Propertylocation', remote_side=[id], backref=db.backref('parent_childs'))
    showGallery = db.Column(db.Boolean())
    videoLink = db.Column(db.String(255))
    createdby_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    modifiedby_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    createdby = db.relationship('User', backref='created_propertylocations', foreign_keys=[createdby_id])
    modifiedby = db.relationship('User', backref='modified_propertylocations', foreign_keys=[modifiedby_id])
    created_at = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc))
    updated_at = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))


    @hybrid_property
    def full_repr(self):
        result = f'''{self.id if self.id is not None else ''}'''
        return result.strip()

    @full_repr.expression
    def full_repr(cls):
        return (
            literal_column("") + literal_column("''")  + func.coalesce(cls.id, literal_column("''"))  + literal_column("''")
        )

    def __repr__(self) -> str:
        return self.full_repr 
    __default_ordering__ = [desc('id')]

    __table_args__ = {
        "mysql_charset": "utf8mb4",
        "mysql_collate": "utf8mb4_unicode_ci",
    }


def get_fields():
    fields = {'backgroundImage': {'id': 148, 'type': 'blob', 'name': 'backgroundImage', 'maxlength': None, 'connected_table': None, 'label': 'Background Image', 'input': 'image', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}, 'description': {'id': 149, 'type': 'Text', 'name': 'description', 'maxlength': None, 'connected_table': None, 'label': 'Descripción', 'input': 'textarea', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}, 'featureInHome': {'id': 150, 'type': 'Boolean', 'name': 'featureInHome', 'maxlength': None, 'connected_table': None, 'label': 'Feature In Home', 'input': 'boolean', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}, 'image1': {'id': 151, 'type': 'blob', 'name': 'image1', 'maxlength': None, 'connected_table': None, 'label': 'Imagen 1', 'input': 'image', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}, 'image2': {'id': 152, 'type': 'blob', 'name': 'image2', 'maxlength': None, 'connected_table': None, 'label': 'Imagen 2', 'input': 'image', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}, 'image3': {'id': 153, 'type': 'blob', 'name': 'image3', 'maxlength': None, 'connected_table': None, 'label': 'Imagen 3', 'input': 'image', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}, 'image4': {'id': 154, 'type': 'blob', 'name': 'image4', 'maxlength': None, 'connected_table': None, 'label': 'Imagen 4', 'input': 'image', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}, 'image5': {'id': 155, 'type': 'blob', 'name': 'image5', 'maxlength': None, 'connected_table': None, 'label': 'Imagen 5', 'input': 'image', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}, 'image6': {'id': 156, 'type': 'blob', 'name': 'image6', 'maxlength': None, 'connected_table': None, 'label': 'Imagen 6', 'input': 'image', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}, 'name': {'id': 157, 'type': 'String', 'name': 'name', 'maxlength': None, 'connected_table': None, 'label': 'Name', 'input': 'text', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}, 'parent': {'id': 158, 'type': 'selfParent', 'name': 'parent', 'maxlength': None, 'connected_table': 10, 'label': 'Parent', 'input': 'connected_table', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}, 'showGallery': {'id': 159, 'type': 'Boolean', 'name': 'showGallery', 'maxlength': None, 'connected_table': None, 'label': 'Show Gallery', 'input': 'boolean', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}, 'videoLink': {'id': 160, 'type': 'String', 'name': 'videoLink', 'maxlength': None, 'connected_table': None, 'label': 'Video Link', 'input': 'text', 'sort': None, 'required': False, 'hidden': False, 'publicBlob': False, 'default_value': None, 'select_options': None, 'extraclass': None, 'allowHtml': False, 'hasManyValues': False, 'readOnly': False, 'calculate_file': None, 'calculate_function': None, 'helper': None}}
    return fields


def get_permissions():
    permissions = {}
    return permissions
