-- Creación de la Base de Datos
CREATE DATABASE IF NOT EXISTS tallercrm;
USE tallercrm;

-- 9. PERFIL DE LA EMPRESA / TALLER
CREATE TABLE empresas (
    id_empresa INT AUTO_INCREMENT PRIMARY KEY,
    ruc VARCHAR(11) NOT NULL UNIQUE,
    nombre VARCHAR(150) NOT NULL,
    telefono VARCHAR(20),
    email VARCHAR(100),
    direccion TEXT,
    descripcion TEXT,
    
    -- Activos Digitales y Multimedia
    url_web VARCHAR(255),
    url_alojamiento VARCHAR(255), -- Para la ruta del hosting o archivos locales
    url_logo VARCHAR(255),
    url_cabecera VARCHAR(255),
    url_calendario VARCHAR(255), -- Link de Google Calendar o Calendly
    url_video_presentacion VARCHAR(255),
    url_imagen_principal VARCHAR(255),
    url_imagen_complemento VARCHAR(255),
    url_cover_video VARCHAR(255),
    url_brochure VARCHAR(255), -- Enlace a PDF o catálogo
    
    -- Redes Sociales
    url_facebook VARCHAR(255),
    url_tiktok VARCHAR(255),
    url_instagram VARCHAR(255),
    url_linkedin VARCHAR(255),
    url_youtube VARCHAR(255),
    
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- 1. MAESTRO DE CLIENTES
-- Soporta DNI y RUC para el mercado peruano.
CREATE TABLE clientes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tipo_documento ENUM('DNI', 'RUC', 'CE') NOT NULL,
    numero_documento VARCHAR(11) NOT NULL UNIQUE,
    nombre_razon_social VARCHAR(150) NOT NULL,
    apellido VARCHAR(150), 
    celular VARCHAR(20),
    email VARCHAR(100),
    direccion TEXT,
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- 2. MAESTRO DE VEHÍCULOS
-- Relación 1:N con Clientes.
CREATE TABLE vehiculos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    cliente_id INT NOT NULL,
    placa VARCHAR(10) NOT NULL UNIQUE,
    marca VARCHAR(50),
    modelo VARCHAR(50),
    anio INT,
    color VARCHAR(30),
    vin VARCHAR(17), 
    numero_motor VARCHAR(50),
    -- Nuevos campos CRM y Control
    seguro_vehicular ENUM('Rímac', 'Pacífico', 'La Positiva', 'Interseguro', 'Qualitas', 'Particular/Ninguno') DEFAULT 'Particular/Ninguno',
    soat_vencimiento DATE,
    revision_tecnica_vencimiento DATE,
    tarjeta_propiedad_url VARCHAR(255), -- Ruta del archivo PDF o Imagen
    
    kilometraje_ultimo INT DEFAULT 0,
    FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- 3. CATÁLOGO DE INVENTARIO PARA RECEPCIÓN
-- Items que se revisan visualmente al recibir el auto.
CREATE TABLE maestros_inventario (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tipo ENUMENUM('Exterior', 'Interior', 'Documentación') DEFAULT 'Exterior' NULL,
    descripcion VARCHAR(100) NOT NULL
) ENGINE=InnoDB;

-- 4. ORDEN DE RECEPCIÓN
-- Registro de ingreso del vehículo al taller.
CREATE TABLE recepciones (
    id INT AUTO_INCREMENT PRIMARY KEY,
    vehiculo_id INT NOT NULL,
    fecha_entrada DATETIME DEFAULT CURRENT_TIMESTAMP,
    kilometraje_entrada INT NOT NULL,
    nivel_combustible ENUM('E', '1/4', '1/2', '3/4', 'F') NOT NULL,
    observaciones_cliente TEXT,
    observaciones_tecnicas TEXT,
    estado ENUM('Pendiente', 'En Proceso', 'Terminado', 'Entregado') DEFAULT 'Pendiente',
    FOREIGN KEY (vehiculo_id) REFERENCES vehiculos(id)
) ENGINE=InnoDB;

-- 5. DETALLE DE INVENTARIO POR RECEPCIÓN
-- Tabla puente que guarda el estado de cada item del maestro al ingresar.
CREATE TABLE recepcion_inventario (
    id INT AUTO_INCREMENT PRIMARY KEY,
    recepcion_id INT NOT NULL,
    item_id INT NOT NULL,
    estado_item ENUM('SI', 'NO', 'DAÑADO') DEFAULT 'SI',
    comentario VARCHAR(255),
    FOREIGN KEY (recepcion_id) REFERENCES recepciones(id) ON DELETE CASCADE,
    FOREIGN KEY (item_id) REFERENCES maestros_inventario(id)
) ENGINE=InnoDB;

-- 6. MAESTRO DE PRODUCTOS Y SERVICIOS
-- Base para generar cotizaciones.
CREATE TABLE productos_servicios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    codigo VARCHAR(20) UNIQUE,
    descripcion VARCHAR(200) NOT NULL,
    tipo ENUM('SERVICIO', 'REPUESTO') NOT NULL,
    precio_sugerido DECIMAL(10,2) NOT NULL,
    stock_actual INT DEFAULT 0,
    unidad_medida VARCHAR(20) DEFAULT 'UND'
) ENGINE=InnoDB;

-- 7. COTIZACIONES (CABECERA)
CREATE TABLE cotizaciones (
    id INT AUTO_INCREMENT PRIMARY KEY,
    recepcion_id INT NOT NULL,
    fecha_cotizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    subtotal DECIMAL(10,2) DEFAULT 0.00,
    igv DECIMAL(10,2) DEFAULT 0.00,
    total DECIMAL(10,2) DEFAULT 0.00,
    estado ENUM('Borrador', 'Enviado', 'Aprobado', 'Rechazado') DEFAULT 'Borrador',
    FOREIGN KEY (recepcion_id) REFERENCES recepciones(id)
) ENGINE=InnoDB;

ALTER TABLE cotizaciones 
ADD COLUMN revision_general TEXT AFTER recepcion_id,
ADD COLUMN requerimientos_vehiculo TEXT AFTER revision_general,
ADD COLUMN trabajos_realizados TEXT AFTER requerimientos_vehiculo;

-- 8. DETALLE DE COTIZACIÓN
CREATE TABLE cotizacion_detalle (
    id INT AUTO_INCREMENT PRIMARY KEY,
    cotizacion_id INT NOT NULL,
    item_id INT NOT NULL,
    cantidad DECIMAL(10,2) NOT NULL,
    precio_unitario DECIMAL(10,2) NOT NULL,
    subtotal_item DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (cotizacion_id) REFERENCES cotizaciones(id) ON DELETE CASCADE,
    FOREIGN KEY (item_id) REFERENCES productos_servicios(id)
) ENGINE=InnoDB;

-- ==========================================================
-- DATA INICIAL (SEEDERS)
-- ==========================================================

INSERT INTO maestros_inventario (descripcion) VALUES 
('Radio / Pantalla'), ('Espejos Retrovisores'), ('Gata Hidráulica'), 
('Llanta de Repuesto'), ('Herramientas'), ('Extintor'), 
('Emblemas'), ('Vasos de Ruedas'), ('Tarjeta de Propiedad');

INSERT INTO productos_servicios (codigo, descripcion, tipo, precio_sugerido) VALUES 
('SERV-001', 'Mantenimiento Preventivo 5K', 'SERVICIO', 150.00),
('SERV-002', 'Lavado de Salón', 'SERVICIO', 80.00),
('REP-001', 'Aceite 10W40 (Castrol)', 'REPUESTO', 140.00),
('REP-002', 'Filtro de Aire', 'REPUESTO', 35.00);