from .extensions import db
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash


class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password_hash = db.Column(db.String(512))

    def set_password(self, password):
        self.password_hash = generate_password_hash(password, method='scrypt')

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

class Precio(db.Model):
    __tablename__ = 'Precios'
    id = db.Column(db.Integer, primary_key=True)
    Proyecto = db.Column(db.String(255), nullable=True)
    Modelos = db.Column(db.String(255), nullable=True)
    Programa = db.Column(db.String(255), nullable=True)
    Superficie = db.Column(db.Numeric(10, 2), nullable=True)
    Patio = db.Column(db.Numeric(10, 2), nullable=True)
    Terraza = db.Column(db.Numeric(10, 2), nullable=True)
    Desde = db.Column(db.Numeric(10, 2), nullable=True)
    Hasta = db.Column(db.Numeric(10, 2), nullable=True)
    En_Stock = db.Column(db.Boolean, nullable=True)
    
    def to_dict(self):
        return {
            "id": self.id,
            "Proyecto": self.Proyecto,
            "Modelos": self.Modelos,
            "Programa": self.Programa,
            "Superficie": self.Superficie,
            "Patio": self.Patio,
            "Terraza": self.Terraza,
            "Desde": self.Desde,
            "Hasta": self.Hasta,
            "En_Stock": self.En_Stock
        }

class Proyecto(db.Model):
    __tablename__ = 'Proyectos'
    id = db.Column(db.Integer, primary_key=True)
    Inmobiliaria = db.Column(db.String(255), nullable=True)
    Proyecto = db.Column(db.String(255), nullable=True)
    Fecha_de_entrega = db.Column(db.Date, nullable=True)
    Direccion = db.Column(db.Text, nullable=True)
    Comuna = db.Column(db.String(255), nullable=True)
    Cantidad_de_Modelos = db.Column(db.Integer, nullable=True)
    Desde_del_proyecto = db.Column(db.Numeric(10, 2), nullable=True)
    
    def to_dict(self):
        return {
            "id": self.id,
            "Inmobiliaria": self.Inmobiliaria,
            "Proyecto": self.Proyecto,
            "Fecha_de_entrega": self.Fecha_de_entrega,
            "Direccion": self.Direccion,
            "Comuna": self.Comuna,
            "Cantidad_de_Modelos": self.Cantidad_de_Modelos,
            "Desde_del_proyecto": self.Desde_del_proyecto
        }

class Vendedor(db.Model):
    __tablename__ = 'Vendedores'
    id = db.Column(db.Integer, primary_key=True)
    Inmobiliaria = db.Column(db.String(255), nullable=True)
    Proyecto = db.Column(db.String(255), nullable=False)
    Vendedor = db.Column(db.String(255), nullable=True)
    Telefono = db.Column(db.String(50), nullable=True)
    Email = db.Column(db.String(255), nullable=True)
    Direccion_Sala_de_ventas = db.Column(db.Text, nullable=True)
    
    def to_dict(self):
        return {
            "id": self.id,
            "Inmobiliaria": self.Inmobiliaria,
            "Proyecto": self.Proyecto,
            "Vendedor": self.Vendedor,
            "Telefono": self.Telefono,
            "Email": self.Email,
            "Direccion_Sala_de_ventas": self.Direccion_Sala_de_ventas
        }