from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

db = SQLAlchemy()


# Tabla de login local (nueva)
class User(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    usuario = db.Column(db.String(80), unique=True, nullable=False)
    password_hash = db.Column(db.String(255), nullable=False)
    nombre = db.Column(db.String(120))
    apellido = db.Column(db.String(120))
    correo = db.Column(db.String(150))
    rol = db.Column(db.String(30), default="UsuarioEmpresa")
    activado = db.Column(db.Boolean, default=True)


class UserEmpresa(db.Model):
    __tablename__ = "user_empresas"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    user_id = db.Column(db.Integer, nullable=False, index=True)
    inmobiliaria_id = db.Column(db.Integer, nullable=False, index=True)
    created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)


class Inmobiliaria(db.Model):
    __tablename__ = "inmobiliarias"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    empresa_nombre_real = db.Column(db.String(255), unique=True, nullable=False)
    activa = db.Column(db.Boolean, default=True, nullable=False)
    cliente = db.Column(db.String(100))


class AwTipoCliente(db.Model):
    __tablename__ = "aw_tipos_cliente"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    nombre = db.Column(db.String(120), unique=True, nullable=False)


class AwEmpresaProgramacionTema(db.Model):
    __tablename__ = "aw_empresa_programacion_temas"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    empresa_id = db.Column(db.Integer, nullable=False, index=True)
    tema = db.Column(db.String(255), nullable=False)
    orden = db.Column(db.Integer, nullable=False, default=1)
    fecha_activacion_tema = db.Column(db.Date)
    fecha_propuesta = db.Column(db.Date)
    created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)
    updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)


# Vendedores (usa la tabla existente 'Usuarios')
class Vendedor(db.Model):
    __tablename__ = "Usuarios"
    id_bdd = db.Column("id bdd", db.Integer, primary_key=True)
    inmobiliaria = db.Column("Inmobiliaria", db.String(255))
    usuario_nombre = db.Column(db.String(255), nullable=False)
    usuario_apellido = db.Column(db.String(255), nullable=False)
    cargo = db.Column("Cargo", db.String(255))
    cargo_generico = db.Column(db.String(255), nullable=False)
    reporteria = db.Column(db.String(255))
    proyecto = db.Column("Proyecto", db.String(255))
    santiago_o_region = db.Column(db.String(255))
    perfil_proyecto = db.Column("Perfil Proyecto", db.String(255))
    tipo = db.Column("Tipo", db.String(255))
    mail = db.Column(db.String(255), nullable=False)
    whatsapp_phone = db.Column(db.String(255))
    suscripcion = db.Column(db.Enum("activa", "inactiva"), default="activa")
    recordatorio = db.Column(db.String(2), nullable=False, default="Si")


class Tema(db.Model):
    __tablename__ = "Temas"
    id_tema = db.Column(db.Integer, primary_key=True)
    tema = db.Column(db.String(100), nullable=True)
    cliente = db.Column("cliente", db.String(100))
    boton1 = db.Column(db.String(255), nullable=True)
    boton1_tema = db.Column(db.String(255), nullable=True)
    boton2 = db.Column(db.String(255), nullable=True)
    boton2_tema = db.Column(db.String(255), nullable=True)

    pregunta1 = db.Column("Pregunta1", db.String(600), nullable=True)
    pregunta2 = db.Column("Pregunta2", db.String(600), nullable=True)
    pregunta3 = db.Column("Pregunta3", db.String(600), nullable=True)

    respuesta_esperada1 = db.Column("respuesta_esperada1", db.String(255), nullable=True)
    respuesta_esperada2 = db.Column("respuesta_esperada2", db.String(255), nullable=True)
    respuesta_esperada3 = db.Column("respuesta_esperada3", db.String(255), nullable=True)

    template = db.Column("Template", db.String(255), nullable=True)
    imagen_template = db.Column(db.String(255), nullable=False)


class Interaccion(db.Model):
    __tablename__ = "interacciones"
    id = db.Column(db.BigInteger, primary_key=True)
    chatfuel_user_id = db.Column(db.String(255))
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)
    last_seen = db.Column(db.DateTime)

    boton1 = db.Column(db.String(255))
    boton1_tema = db.Column(db.String(255))
    boton2 = db.Column(db.String(255))
    boton2_tema = db.Column(db.String(255))

    pregunta1 = db.Column("Pregunta1", db.String(300))
    pregunta2 = db.Column("Pregunta2", db.String(300))
    pregunta3 = db.Column("Pregunta3", db.String(300))

    respuesta_esperada1 = db.Column(db.Text)
    respuesta_esperada2 = db.Column(db.Text)
    respuesta_esperada3 = db.Column(db.Text)

    respuesta1 = db.Column(db.String(1500))
    respuesta2 = db.Column(db.String(1500))
    respuesta3 = db.Column(db.String(1500))

    conclusiones_mejoras = db.Column(db.Text)
    ideas_futuros_temas = db.Column(db.Text)
    sugerencias = db.Column(db.Text)

    inmobiliaria = db.Column(db.String(255))
    mail = db.Column(db.String(255))
    proyecto = db.Column(db.String(255))
    reporteria = db.Column(db.String(255))
    santiago_o_region = db.Column(db.String(255))

    tipo_producto = db.Column(db.String(255))
    tipo_proyecto = db.Column(db.String(255))

    usuario_apellido = db.Column(db.String(255))
    usuario_nombre = db.Column(db.String(255))
    signed_up = db.Column(db.DateTime)
    whatsapp_phone = db.Column(db.String(255))

    cargo = db.Column(db.String(255))
    cargo_generico = db.Column(db.String(255))
    suscripcion = db.Column(db.String(255))

    tema = db.Column(db.String(255))

    json = db.Column(db.Integer)
    enviado_email = db.Column(db.Integer, nullable=False, default=0)
    estado = db.Column(db.String(255), nullable=False, default="Sin hacer")
    avance = db.Column(db.Integer)
    id_interaccion_parcial = db.Column(db.Integer)

    cuantitativo1 = db.Column(db.Integer)
    cuantitativo2 = db.Column(db.Integer)
    cuantitativo3 = db.Column(db.Integer)

    evaluacion1 = db.Column(db.String(1500))
    evaluacion2 = db.Column(db.String(1500))
    evaluacion3 = db.Column(db.String(1500))


class EnviarTemplate(db.Model):
    __tablename__ = "enviar_template"
    id = db.Column(db.Integer, primary_key=True)
    telefono = db.Column(db.String(20))
    tema = db.Column(db.String(255))
    fecha = db.Column(db.DateTime, default=datetime.utcnow)
    template = db.Column(db.String(255))
    fecha_hora_envio = db.Column(db.DateTime)
    zona_horaria = db.Column(db.Enum("America/Santiago", "America/Lima", "Europe/Zurich"), nullable=False, default="America/Santiago")
    inmobiliaria = db.Column("Inmobiliaria", db.String(255))
    usuario_nombre = db.Column(db.String(100))
    usuario_apellido = db.Column(db.String(100))


class EstructuraTema(db.Model):
    __tablename__ = "estructura_temas"
    id = db.Column("id_estructura_temas", db.Integer, primary_key=True, autoincrement=True)
    tema = db.Column("Tema", db.String(255))
    cliente = db.Column(db.String(50), nullable=False)
    json = db.Column(db.Integer)
    tipo_de_elemento = db.Column(db.String(100))
    requiere_respuesta = db.Column(db.String(10))
    detalle_de_item = db.Column(db.String(3500))
    avance = db.Column(db.Integer)


class TipoElemento(db.Model):
    __tablename__ = "tipos_elemento"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    nombre = db.Column(db.String(255), unique=True, nullable=False)


class FechaPrimerTemplate(db.Model):
    __tablename__ = "fechas_primer_template"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    fecha_primer_envio = db.Column(db.DateTime)
    telefono = db.Column(db.String(50))
    tema = db.Column(db.Text)
    fecha_ejecucion_final = db.Column(db.DateTime)

class EjercicioPendiente(db.Model):
    __tablename__ = "Ejercicios pendientes"
    id = db.Column(db.Integer, primary_key=True)
    tema = db.Column("Tema", db.String(255), nullable=False)
    cliente = db.Column("Cliente", db.String(255))
    whatsapp = db.Column("Whatsapp", db.String(15), nullable=False)
    fecha_envio_ejercicio = db.Column("Fecha envío ejercicio", db.DateTime)
    recordatorio_numero = db.Column("recordatorio numero", db.Integer, nullable=False)



