-- =====================================================
-- VERIFICAR Y CORREGIR ESTRUCTURA DE TABLA VENTAS
-- Ejecutar en phpMyAdmin
-- =====================================================

-- 1. VER ESTRUCTURA ACTUAL DE LA TABLA VENTAS
DESCRIBE ventas;

-- 2. SI LA TABLA NO EXISTE O NECESITA RECREARSE, USAR ESTO:

-- Primero eliminar si existe (CUIDADO: borra datos)
-- DROP TABLE IF EXISTS ventas_pagos;
-- DROP TABLE IF EXISTS ventas_detalle;
-- DROP TABLE IF EXISTS ventas;

-- 3. CREAR TABLA VENTAS CON ESTRUCTURA CORRECTA
CREATE TABLE IF NOT EXISTS ventas (
    id_venta INT AUTO_INCREMENT PRIMARY KEY,
    codigo VARCHAR(20) NOT NULL,
    id_cliente INT NOT NULL,
    id_almacen INT NOT NULL,
    id_caja INT NULL,
    id_movimiento_caja INT NULL,
    id_tipo_comprobante INT NOT NULL DEFAULT 1,
    serie VARCHAR(10) NOT NULL DEFAULT 'B001',
    numero VARCHAR(20) NOT NULL,
    fecha_emision DATE NOT NULL,
    hora_emision TIME NOT NULL,
    subtotal DECIMAL(12,2) NOT NULL DEFAULT 0,
    descuento DECIMAL(12,2) NOT NULL DEFAULT 0,
    igv DECIMAL(12,2) NOT NULL DEFAULT 0,
    total DECIMAL(12,2) NOT NULL DEFAULT 0,
    observaciones TEXT NULL,
    id_usuario_vendedor INT NOT NULL,
    estado TINYINT NOT NULL DEFAULT 1 COMMENT '1=Activa, 0=Anulada',
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_cliente (id_cliente),
    INDEX idx_almacen (id_almacen),
    INDEX idx_fecha (fecha_emision),
    INDEX idx_estado (estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 4. CREAR TABLA VENTAS_DETALLE
CREATE TABLE IF NOT EXISTS ventas_detalle (
    id_detalle INT AUTO_INCREMENT PRIMARY KEY,
    id_venta INT NOT NULL,
    id_producto INT NOT NULL,
    cantidad INT NOT NULL,
    precio_unitario DECIMAL(12,2) NOT NULL,
    descuento DECIMAL(12,2) NOT NULL DEFAULT 0,
    subtotal DECIMAL(12,2) NOT NULL,
    igv DECIMAL(12,2) NOT NULL DEFAULT 0,
    total DECIMAL(12,2) NOT NULL,
    FOREIGN KEY (id_venta) REFERENCES ventas(id_venta) ON DELETE CASCADE,
    INDEX idx_producto (id_producto)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 5. CREAR TABLA VENTAS_PAGOS
CREATE TABLE IF NOT EXISTS ventas_pagos (
    id_pago INT AUTO_INCREMENT PRIMARY KEY,
    id_venta INT NOT NULL,
    id_metodo_pago INT NOT NULL,
    monto DECIMAL(12,2) NOT NULL,
    referencia VARCHAR(100) NULL,
    numero_operacion VARCHAR(50) NULL,
    fecha_pago DATETIME NOT NULL,
    FOREIGN KEY (id_venta) REFERENCES ventas(id_venta) ON DELETE CASCADE,
    INDEX idx_metodo (id_metodo_pago)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 6. CREAR TABLA TIPOS_COMPROBANTE SI NO EXISTE
CREATE TABLE IF NOT EXISTS tipos_comprobante (
    id_tipo_comprobante INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL,
    codigo VARCHAR(10) NOT NULL,
    serie_defecto VARCHAR(10) NOT NULL,
    estado TINYINT DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Insertar tipos de comprobante básicos
INSERT IGNORE INTO tipos_comprobante (id_tipo_comprobante, nombre, codigo, serie_defecto) VALUES
(1, 'Boleta de Venta', '03', 'B001'),
(2, 'Factura', '01', 'F001'),
(3, 'Nota de Venta', '00', 'NV01');

-- 7. CREAR TABLA METODOS_PAGO SI NO EXISTE
CREATE TABLE IF NOT EXISTS metodos_pago (
    id_metodo_pago INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL,
    descripcion VARCHAR(200) NULL,
    requiere_referencia TINYINT DEFAULT 0,
    estado TINYINT DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Insertar métodos de pago básicos
INSERT IGNORE INTO metodos_pago (id_metodo_pago, nombre, requiere_referencia) VALUES
(1, 'Efectivo', 0),
(2, 'Tarjeta de Crédito', 1),
(3, 'Tarjeta de Débito', 1),
(4, 'Transferencia', 1),
(5, 'Yape', 1),
(6, 'Plin', 1);

-- 8. VERIFICAR QUE EXISTAN LAS TABLAS RELACIONADAS
-- Verificar clientes
SELECT COUNT(*) AS total_clientes FROM clientes WHERE estado = 1;

-- Verificar almacenes
SELECT COUNT(*) AS total_almacenes FROM almacenes WHERE estado = 1;

-- Verificar productos con stock
SELECT COUNT(*) AS total_productos FROM productos WHERE estado = 1;

-- 9. SI TODO ESTÁ BIEN, MOSTRAR ESTRUCTURA FINAL
DESCRIBE ventas;
DESCRIBE ventas_detalle;
DESCRIBE ventas_pagos;
