USE votaciones
GO

-- Eliminar y crear la tabla catalogo_regiones
CREATE TABLE catalogo_regiones (
    pk_region INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    nombre NVARCHAR(100),
    pk_tipo INT,
    pk_region_mayor INT,
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);

-- Eliminar y crear la tabla catalogo_regiones_tipo
CREATE TABLE catalogo_regiones_tipo (
    pk_tipo INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    nombre NVARCHAR(100),
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);

-- Eliminar y crear la tabla partidos
CREATE TABLE partidos (
    pk_partido INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    nombre NVARCHAR(100),
    abreviatura NVARCHAR(20),
    pk_region INT,
    url_foto NVARCHAR(255),
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);

-- Eliminar y crear la tabla movimientos
CREATE TABLE movimientos (
    pk_movimiento INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    pk_partido INT,
    nombre NVARCHAR(100),
    partido INT,
    url_foto NVARCHAR(255),
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);

EXEC sp_addextendedproperty 
    @name = N'Comentarios', 
    @value = 'partido = 1 significa que el movimiento se toma a nivel de partido',
    @level0type = N'SCHEMA', @level0name = 'dbo', 
    @level1type = N'TABLE',  @level1name = 'movimientos', 
    @level2type = N'COLUMN', @level2name = 'partido';

-- Eliminar y crear la tabla candidatos
CREATE TABLE candidatos (
    pk_candidato INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    pk_movimiento INT,
    pk_eleccion_proceso INT,
    pk_region INT,
    pk_tipo INT,
    pk_candidato_mayor INT,
    pk_sexo INT,
    pk_nacionalidad INT,
    nombres NVARCHAR(100),
    apellidos NVARCHAR(100),
    direccion NVARCHAR(255),
    telefono NVARCHAR(20),
    celular NVARCHAR(20),
    email NVARCHAR(100),
    identidad NVARCHAR(20),
    rtn NVARCHAR(20),
    fecha_nacimiento DATE,
    casilla INT,
    url_foto_papeleta NVARCHAR(255),
    url_foto_perfil NVARCHAR(255),
    url_foto_identidad_anverso NVARCHAR(255),
    url_foto_identidad_reverso NVARCHAR(255),
    url_archivo_adicional NVARCHAR(255),
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);


-- Eliminar y crear la tabla candidatos_tipo
CREATE TABLE candidatos_tipo (
    pk_tipo INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    nombre NVARCHAR(100),
    pk_region_tipo INT,
    pk_tipo_mayor INT,
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);

-- Eliminar y crear la tabla elecciones
CREATE TABLE elecciones (
    pk_eleccion INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    pk_region INT,
    pk_tipo INT,
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);

-- Eliminar y crear la tabla elecciones_tipo
CREATE TABLE elecciones_tipo (
    pk_tipo INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    nombre NVARCHAR(100),
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);

-- Eliminar y crear la tabla elecciones_candidatos_x_region
CREATE TABLE elecciones_candidatos_x_region (
    pk_configuracion INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    pk_eleccion INT,
    pk_region INT,
    pk_candidato_tipo INT,
    cantidad INT,
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);

-- Eliminar y crear la tabla elecciones_proceso
CREATE TABLE elecciones_proceso (
    pk_proceso INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    pk_eleccion INT,
    anio INT,
    mes NVARCHAR(50),
    dia INT,
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);

-- Eliminar y crear la tabla elecciones_proceso_acta
CREATE TABLE elecciones_proceso_acta (
    pk_acta INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    pk_proceso INT,
    pk_candidato INT,
    votos INT,
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);

-- Eliminar y crear la tabla catalogo_sexo
CREATE TABLE catalogo_sexos (
    pk_sexo INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    nombre NVARCHAR(50),
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);

-- Eliminar y crear la tabla catalogo_nacionalidad
CREATE TABLE catalogo_nacionalidades (
    pk_nacionalidad INT PRIMARY KEY IDENTITY(1,1), -- Columna autoincremental
    nombre NVARCHAR(100),
    estado INT DEFAULT 1,
    creado_por INT,
    fecha_hora_creado DATETIME DEFAULT GETDATE(),
    modificado_por INT NULL, -- Permite NULL
    fecha_hora_modificado DATETIME NULL
);