create table sistema.datos_usuarios(
    id int not null identity(1,1),
    username varchar(50) not null,
    password nvarchar(300) not null,
    foto nvarchar(150) not null default 'default.png',
    nombres varchar(150) null,
    apellidos varchar(150) null,
    email varchar(150) null,
	sesionActual nvarchar(300) null,
    primerIngreso bit not null default 1,
    intentosRestantes int not null default 5,
    bloqueado bit not null default 0,
	cambioContrasenia bit not null default 0,
    estado bit not null default 1,
    fechaRegistro datetime not null default getdate(),
    ultimaModificacion datetime null,
    fechaBloqueo datetime null,
    fechaDesbloqueo datetime null,
    fechaEliminacion datetime null,
    primary key (id)
);

create table sistema.logs_ingresos(
	id int not null identity(1,1),
	idUsuario int not null,
	sesion nvarchar(300) null,
	fechaIngreso datetime not null default getdate(),
	fechaSalida datetime null,
	ipOrdenador varchar(50) null,
	estado bit not null default 1,
	primary key(id),
	foreign key(idUsuario) references sistema.datos_usuarios(id)
);

--alter table sistema.logs_ingresos add jwt text null;

create table sistema.logs_cambiosContrasenia(
	id int not null identity(1,1),
	idUsuario int not null,
	contraseniaAnterior nvarchar(300) null,
	origen varchar(50) null,
	fechaRegistro datetime not null default getdate(),
	estado bit not null default 1,
	primary key(id),
	foreign key(idUsuario) references sistema.datos_usuarios(id)
);

create table sistema.cat_tiposRol(
	id int not null identity(1,1),
	tipo varchar(150) null,
	fechaRegistro datetime not null default getdate(),
	estado bit not null default 1,
	primary key(id)
);

-- insert into sistema.cat_tiposRol(tipo) values('Administrativo'),('Operativo');

create table sistema.datos_roles(
	id int not null identity(1,1),
	rol varchar(150) null,
	idTipo int not null,
	fechaRegistro datetime not null default getdate(),
	estado bit not null default 1,
	primary key(id),
	foreign key(idTipo) references sistema.cat_tiposRol(id)
);

create table sistema.config_rolesUsuario(
	idUsuario int not null,
	idRol int not null,
	foreign key(idUsuario) references sistema.datos_usuarios(id),
	foreign key(idRol) references sistema.datos_roles(id)
);

create table sistema.datos_restablecimientosContrasenia(
	id int not null identity(1,1),
	idUsuario int not null,
	email nvarchar(300) null,
	contrasenia nvarchar(300) null,
	fechaRegistro datetime not null default getdate(),
	fechaUso datetime null,
	estado bit not null default 1,
	primary key(id),
	foreign key(idUsuario) references sistema.datos_usuarios(id)
);

create table sistema.datos_modulos(
	id int not null identity(1,1),
	titulo varchar(300) null,
	contenedor varchar(150) null,
	descripcion text null,
	mantenimiento bit not null default 0,
	fechaRegistro datetime not null default getdate(),
	ultimaActualizacion datetime null,
	estado bit not null default 1,
	idUsuario int not null,
	primary key(id),
	foreign key(idUsuario) references sistema.datos_usuarios(id)
);

create table sistema.det_apartados(
	idModulo int not null,
	id int not null identity(1,1),
	icono varchar(100) null,
	titulo varchar(300) null,
	descripcion text,
	tipo char(1) not null default 'V',
	nombreArchivo nvarchar(300) null,
	idSuperior int null,
	nivel int not null default 1,
	mantenimiento bit not null default 0,
	fechaRegistro datetime not null default getdate(),
	ultimaActualizacion datetime null,
	estado bit not null default 1,
	idUsuario int not null,
	foreign key(idModulo) references sistema.datos_modulos(id),
	primary key(id),
	foreign key(idUsuario) references sistema.datos_usuarios(id)
);

create table sistema.datos_permisos(
	id int not null identity(1,1),
	tipoContenedor varchar(150) not null default 'modulo',
	idContenedor int not null,
	tipoAsignacion varchar(25) not null default 'rol',
	idAsignacion int not null,
	tipoPermiso varchar(25) not null default 'LECTURA',
	fechaRegistro datetime not null default getdate(),
	ultimaActualizacion datetime null,
	estado bit not null default 1,
	idUsuario int not null,
	primary key(id),
	foreign key(idUsuario) references sistema.datos_usuarios(id)
);

create table sistema.datos_empresas(
	id int not null identity(1,1),
	codempresa int not null,
	principal bit not null default 0,
	nombreEmpresa varchar(300) null,
	urlApi nvarchar(300) null,
	apiKey nvarchar(350) null,
	fechaRegistro datetime not null default getdate(),
	estado bit not null default 1,
	idUsuario int not null,
	primary key(id),
	foreign key(idUsuario) references sistema.datos_usuarios(id)
);

create table sistema.config_rubrosEmpresa(
	idEmpresa int not null,
	id int not null identity(1,1),
	idRubro int not null,
	idUsuario int not null,
	fechaRegistro datetime not null default getdate(),
	estado bit not null default 1,
	primary key(id),
	foreign key(idEmpresa) references sistema.datos_empresas(id),
	foreign key(idRubro) references general.cat_rubrosEmpresa(id),
	foreign key(idUsuario) references sistema.datos_usuarios(id)
);

create table sistema.config_modulosEmpresa(
	idEmpresa int not null,
	id int not null identity(1,1),
	idModulo int not null,
	fechaRegistro datetime not null default getdate(),
	idUsuario int not null,
	estado bit not null default 1,
	primary key(id),
	foreign key(idEmpresa) references sistema.datos_empresas(id),
	foreign key(idModulo) references sistema.datos_modulos(id),
	foreign key(idUsuario) references sistema.datos_usuarios(id)
);

create table sistema.config_empresasUsuario(
	idUsuario int,
	idModulo int,
	idEmpresa int,
	idSuperior int,
	codempresa int,
	nombreEmpresa varchar(300) null,
	id int not null identity(1,1),
	estado bit not null default 1,
	primary key(id),
	foreign key(idUsuario) references sistema.datos_usuarios(id),
	foreign key(idModulo) references sistema.datos_modulos(id),
);

create table sistema.config_sucursalesUsuario(
	idUsuario int,
	idConfig int,
	codsucursal int,
	nombreSucursal varchar(300),
	id int not null identity(1,1),
	estado bit not null default 1,
	primary key(id),
	foreign key(idUsuario) references sistema.datos_usuarios(id),
	foreign key(idConfig) references sistema.config_empresasUsuario(id) on delete cascade,
);

create table sistema.config_proyectosUsuario(
	idUsuario int,
	idConfig int,
	codproyecto int,
	nombreProyecto  varchar(300),
	id int not null identity(1,1),
	estado bit not null default 1,
	primary key(id),
	foreign key(idUsuario) references sistema.datos_usuarios(id),
	foreign key(idConfig) references sistema.config_sucursalesUsuario(id) on delete cascade
);

