-- Seleccionar base de datos
USE data_nexapps;
GO

-- Crear el esquema TJT si no existe
IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'TJT')
BEGIN
    EXEC('CREATE SCHEMA TJT')
END;
GO

-- Tabla TJT.tarjetas_propietarios_tipos
GO
CREATE TABLE TJT.tarjetas_propietarios_tipos (
    id_tarjeta_propietario_tipo INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas_tipos
GO
CREATE TABLE TJT.tarjetas_tipos (
    id_tarjeta_tipo INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.bancos
GO
CREATE TABLE TJT.bancos (
    id_banco INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(100) NULL,
    id_region INT NULL,
    direccion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas
GO
CREATE TABLE TJT.tarjetas (
    id_tarjeta INT IDENTITY(1,1) PRIMARY KEY,
    id_tarjeta_propietario_id INT NULL,
    id_tarjeta_propietario_tipo INT NULL,
    id_tarjeta_tipo INT NULL,
    id_banco INT NULL,
    moneda VARCHAR(10) NULL,                                        -- 'USD'
    moneda_nacional VARCHAR(10) NULL,                               -- 'HNL'
    limite_credito DECIMAL(18,2) NULL,                              -- 6000
    tasa_interes_anual_nacional DECIMAL(5,2) NULL,                  -- 48.21
    tasa_interes_anual_extranjera DECIMAL(5,2) NULL,                -- 42.00
    tasa_interes_moratorio_anual DECIMAL(5,2) NULL,                 -- 
    tasa_sobregiro DECIMAL(5,2) NULL,                               -- 1.00
    monto_min_sobregiro DECIMAL(18,2) NULL,                         -- 5
    fecha_corte INT NULL,                                           -- 19
    fecha_pago_dias INT NULL,                                       -- 15
    limite_credito_max DECIMAL(18,2) NULL,                          -- 30000 (opcional)
    tasa_interes_anual_max DECIMAL(5,2) NULL,                       -- 54.00 (opcional)
    tasa_interes_moratorio_anual_max DECIMAL(5,2) NULL,             -- 2.00 (opcional)
    numero VARCHAR(MAX) NULL,
    mes_vencimiento VARCHAR(MAX) NULL,
    anio_vencimiento VARCHAR(MAX) NULL,
    cvv VARCHAR(MAX) NULL,
    titular_nombre VARCHAR(150) NULL,
    comentarios VARCHAR(500) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas_cobros
GO
CREATE TABLE TJT.tarjetas_cobros (
    id_tarjeta_cobro INT IDENTITY(1,1) PRIMARY KEY,
    id_tarjeta INT NOT NULL,                               -- Tarjeta a la que se le aplica el cobro
    id_tarjeta_cobro_target INT NOT NULL,                  -- Target de cobro (credito disponible, credito utilizado, credito limite, etc)
    monto_fijo DECIMAL(18,2) NULL,                         -- Monto fijo a cobrar (0 si no aplica)
    monto_min DECIMAL(18,2) NULL,                          -- Monto mínimo a aplicar si el cálculo de tasa no llega
    tasa DECIMAL(5,2) NULL,                                -- Tasa a aplicar sobre el target
    descripcion VARCHAR(255) NULL,
    estado INT DEFAULT 1,
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE(),
);
GO

-- Tabla TJT.tarjetas_cobros_targets
GO
CREATE TABLE TJT.tarjetas_cobros_targets (
    id_tarjeta_cobro_target INT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,                   -- (credito disponible, credito utilizado, credito limite, credito sobregirado, etc)
    descripcion VARCHAR(255) NULL,
    estado INT DEFAULT 1,
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
);
GO


-- Tabla TJT.empresas_empleados
GO
CREATE TABLE TJT.empresas_empleados (
    id_empresa_empleado INT IDENTITY(1,1) PRIMARY KEY,
    nombres VARCHAR(100) NULL,
    apellidos VARCHAR(100) NULL,
    identidad VARCHAR(20) NULL,
    celular VARCHAR(20) NULL,
    email VARCHAR(100) NULL,
    direccion VARCHAR(255) NULL,
    id_empresa INT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.empresas_departamentos
GO
CREATE TABLE TJT.empresas_departamentos (
    id_empresa_departamento INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    id_empresa INT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas_beneficios
GO
CREATE TABLE TJT.tarjetas_beneficios (
    id_tarjeta_beneficio INT IDENTITY(1,1) PRIMARY KEY,
    id_tarjeta INT NULL,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    monto DECIMAL(18,2) NULL,
    tasa DECIMAL(5,2) NULL,
    suma_o_resta INT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas_intereses
GO
CREATE TABLE TJT.tarjetas_intereses (
    id_tarjeta_interes INT IDENTITY(1,1) PRIMARY KEY,
    id_tarjeta INT NULL,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    monto DECIMAL(18,2) NULL,
    tasa DECIMAL(5,2) NULL,
    suma_o_resta INT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.cuentas
GO
CREATE TABLE TJT.cuentas (
    id_cuenta INT IDENTITY(1,1) PRIMARY KEY,
    codigo_contable VARCHAR(50) NULL,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- USE data_nexapps;
-- ALTER TABLE TJT.tarjetas_gastos_categorias
-- ADD id_tarjeta INT NULL;
-- Tabla TJT.tarjetas_gastos_categorias
GO
CREATE TABLE TJT.tarjetas_gastos_categorias (
    id_tarjeta_gasto_categoria INT IDENTITY(1,1) PRIMARY KEY,
    id_tarjeta INT,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas_gastos
-- USE data_nexapps;
-- ALTER TABLE TJT.tarjetas_gastos
-- ADD referencia VARCHAR(255) NULL,
--     url_foto_2 VARCHAR(255) NULL,
--     fecha_gasto DATE NULL;
-- USE data_nexapps;
-- ALTER TABLE TJT.tarjetas_gastos
-- ADD moneda VARCHAR(10) NULL;
-- USE data_nexapps;
-- ALTER TABLE TJT.tarjetas_gastos
-- ADD id_comercio_producto INT NULL;
-- USE data_nexapps;
-- ALTER TABLE TJT.tarjetas_gastos
-- ADD id_comercio INT NULL;
GO
CREATE TABLE TJT.tarjetas_gastos (
    id_tarjeta_gasto INT IDENTITY(1,1) PRIMARY KEY,
    id_tarjeta INT NULL,
    id_tarjeta_gasto_categoria INT NULL,
    id_comercio INT NULL,
    id_comercio_producto INT NULL,
    referencia VARCHAR(255) NULL,
    descripcion VARCHAR(255) NULL,
    url_foto VARCHAR(255) NULL,
    url_foto_2 VARCHAR(255) NULL,
    monto DECIMAL(18,2) NULL,
    fecha_gasto DATE NULL,
    moneda VARCHAR(10) NULL, 
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.cuentas_gastos_asignaciones
GO
CREATE TABLE TJT.cuentas_gastos_asignaciones (
    id_cuenta_gasto_asignacion INT IDENTITY(1,1) PRIMARY KEY,
    id_cuenta INT NULL,
    id_tarjeta_gasto INT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas_pagos
-- USE data_nexapps;
-- -- ALTER TABLE TJT.tarjetas_pagos
-- -- ALTER COLUMN fecha_hora_pago DATE NULL;
-- EXEC sp_rename 'TJT.tarjetas_pagos.fecha_hora_pago', 'fecha_pago', 'COLUMN';
-- ALTER TABLE TJT.tarjetas_pagos
-- ADD referencia VARCHAR(255) NULL,
--     url_foto_2 VARCHAR(255) NULL;
-- USE data_nexapps;
-- ALTER TABLE TJT.tarjetas_pagos
-- ADD es_pago_minimo INT NULL;
-- USE data_nexapps;
-- ALTER TABLE TJT.tarjetas_pagos
-- ADD moneda VARCHAR(10) NULL;
GO
CREATE TABLE TJT.tarjetas_pagos (
    id_tarjeta_pago INT IDENTITY(1,1) PRIMARY KEY,
    id_tarjeta INT NULL,
    id_tarjeta_gasto INT NULL,
    monto_pagado DECIMAL(18,2) NULL,
    referencia VARCHAR(255) NULL,
    fecha_pago DATE NULL,
    es_pago_minimo INT NULL,
    moneda VARCHAR(10) NULL,
    url_foto VARCHAR(255) NULL,
    url_foto_2 VARCHAR(255) NULL,
    descripcion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.presupuestos_recipientes_tipos
GO
CREATE TABLE TJT.presupuestos_recipientes_tipos (
    id_presupuesto_recipiente_tipo INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.presupuestos
-- USE data_nexapps;
-- ALTER TABLE TJT.presupuestos
-- ADD moneda VARCHAR(10) NULL;
GO
CREATE TABLE TJT.presupuestos (
    id_presupuesto INT IDENTITY(1,1) PRIMARY KEY,
    id_presupuesto_recipiente_id INT NULL,
    id_presupuesto_recipiente_tipo INT NULL,
    monto DECIMAL(18,2) NULL,
    moneda VARCHAR(10) NULL, 
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO



-- USE data_nexapps;
-- Tabla TJT.comercios
GO
CREATE TABLE TJT.comercios (
    id_comercio INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(255) NULL,                              -- Nombre comercial (ej: "Supermercado La Colonia")
    descripcion VARCHAR(500) NULL,                         -- Descripción del comercio
    ruc VARCHAR(30) NULL,                                  -- Registro Único de Contribuyente o equivalente
    telefono VARCHAR(30) NULL,                             -- Teléfono principal
    email VARCHAR(255) NULL,                               -- Correo de contacto
    direccion VARCHAR(500) NULL,                           -- Dirección física
    url_logo VARCHAR(255) NULL,                            -- Logo del comercio
    url_sitio_web VARCHAR(255) NULL,                       -- Sitio web oficial
    estado INT NULL DEFAULT (1),                           -- 1: Activo, 0: Inactivo
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
);
GO


-- Tabla TJT.comercios_productos
-- USE data_nexapps;
-- ALTER TABLE TJT.comercios_productos
-- DROP CONSTRAINT FK__comercios__id_co__3BA0BFE9;
-- SELECT
--     CONSTRAINT_NAME
-- FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
-- WHERE
--     TABLE_SCHEMA = 'TJT'
--     AND TABLE_NAME   = 'comercios_productos'
--     AND CONSTRAINT_TYPE = 'FOREIGN KEY';

GO
CREATE TABLE TJT.comercios_productos (
    id_comercio_producto INT IDENTITY(1,1) PRIMARY KEY,
    id_comercio INT NULL,                                  -- Relación al comercio
    nombre VARCHAR(255) NULL,                     -- Nombre del producto o servicio
    descripcion VARCHAR(500) NULL,                         -- Descripción del producto
    categoria VARCHAR(100) NULL,                           -- Categoría o tipo (ej: "Electrodomésticos")
    precio DECIMAL(18,2) NULL,                             -- Precio del producto
    moneda VARCHAR(10) NULL,                               -- Moneda (ej: "HNL", "USD")
    url_foto VARCHAR(255) NULL,                            -- Imagen principal del producto
    estado INT NULL DEFAULT (1),                           -- 1: Activo, 0: Inactivo
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
);
GO





-- Tabla TJT.backups
GO
CREATE TABLE TJT.backups (
    id_backup INT IDENTITY(1,1) PRIMARY KEY,
    backup_tipo VARCHAR(20) NULL,
    estatus VARCHAR(20) NULL,
    estatus_comentario TEXT NULL,
    tamano_mb DECIMAL(10,2) NULL,
    hash_verificacion TEXT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.audit_log
GO
CREATE TABLE TJT.audit_log (
    id_audit_log INT IDENTITY(1,1) PRIMARY KEY,
    usuario VARCHAR(100),
    entidad_afectada VARCHAR(100) NULL,
    id_entidad INT NULL,
    accion VARCHAR(20) NULL,
    ip_origen VARCHAR(50) NULL,
    dispositivo VARCHAR(255) NULL,
    fecha_hora_evento DATETIME NULL DEFAULT (GETDATE())
)
GO

-- Tabla aichat_mensajes
GO
CREATE TABLE TJT.aichat_mensajes (
    id_mensaje INT IDENTITY(1,1) PRIMARY KEY,
    mensaje VARCHAR(MAX) NULL,
    sesion INT NULL,
    id_usuario INT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
);
GO
