

-- Tipos de vehículo
CREATE TABLE IF NOT EXISTS taller_tipos_vehiculo (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    descripcion TEXT,
    plantilla_danos VARCHAR(50) DEFAULT 'carro',
    activo BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    created_by INT,
    updated_by INT,
    INDEX idx_activo (activo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Datos iniciales tipos de vehículo
INSERT INTO taller_tipos_vehiculo (nombre, plantilla_danos) VALUES
('Carro', 'carro'),
('Moto', 'moto'),
('Camión', 'camion'),
('Pickup', 'carro'),
('SUV', 'carro')
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Cosas que trae el vehículo (checklist)
CREATE TABLE IF NOT EXISTS taller_cosas_trae (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(150) NOT NULL,
    descripcion TEXT,
    activo BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_activo (activo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Datos iniciales cosas que trae
INSERT INTO taller_cosas_trae (nombre) VALUES
('Radio'),
('Gata'),
('Herramientas'),
('Llanta de repuesto'),
('Triángulos'),
('Extintor'),
('Documentos'),
('GPS'),
('Cargador USB'),
('Alfombras')
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Tipos de daño
CREATE TABLE IF NOT EXISTS taller_tipos_dano (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    icono VARCHAR(50),
    color VARCHAR(20) DEFAULT '#ef4444',
    activo BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_activo (activo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Datos iniciales tipos de daño
INSERT INTO taller_tipos_dano (nombre, icono, color) VALUES
('Golpe', 'golpe', '#ef4444'),
('Rayón', 'rayon', '#f59e0b'),
('Quebrado', 'quebrado', '#dc2626'),
('Abolladura', 'abolladura', '#8b5cf6'),
('Oxidado', 'oxidado', '#78716c'),
('Pintura dañada', 'pintura', '#06b6d4')
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Maestro de vehículos
CREATE TABLE IF NOT EXISTS taller_vehiculos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    placa VARCHAR(20) NOT NULL UNIQUE,
    marca VARCHAR(100),
    modelo VARCHAR(100),
    anio INT,
    motor VARCHAR(100),
    cilindraje VARCHAR(50),
    color VARCHAR(50),
    tipo_vehiculo_id INT,
    cliente_id VARCHAR(24),
    notas TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    created_by INT,
    updated_by INT,
    FOREIGN KEY (tipo_vehiculo_id) REFERENCES taller_tipos_vehiculo(id),
    INDEX idx_placa (placa),
    INDEX idx_cliente (cliente_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Órdenes de Trabajo
CREATE TABLE IF NOT EXISTS taller_ordenes_trabajo (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_ot VARCHAR(20) NOT NULL UNIQUE,
    cliente_tarjeta VARCHAR(24) NOT NULL,
    vehiculo_id INT NOT NULL,
    fecha_entrada DATETIME NOT NULL,
    fecha_salida DATETIME,
    km INT NOT NULL,
    nivel_gasolina INT DEFAULT 0,
    requerimiento_cliente TEXT,
    observaciones TEXT,
    estado ENUM('borrador', 'en_proceso', 'cotizada', 'aprobada', 'terminada', 'entregada') DEFAULT 'borrador',
    pdf_escaner VARCHAR(500),
    local_id VARCHAR(36),
    version INT DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    created_by INT,
    updated_by INT,
    FOREIGN KEY (vehiculo_id) REFERENCES taller_vehiculos(id),
    INDEX idx_numero_ot (numero_ot),
    INDEX idx_cliente (cliente_tarjeta),
    INDEX idx_estado (estado),
    INDEX idx_fechas (fecha_entrada, fecha_salida),
    INDEX idx_local_id (local_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Cosas que trae por OT
CREATE TABLE IF NOT EXISTS taller_ot_cosas_trae (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ot_id INT NOT NULL,
    cosa_trae_id INT NOT NULL,
    cantidad INT DEFAULT 1,
    observacion VARCHAR(255),
    FOREIGN KEY (ot_id) REFERENCES taller_ordenes_trabajo(id) ON DELETE CASCADE,
    FOREIGN KEY (cosa_trae_id) REFERENCES taller_cosas_trae(id),
    UNIQUE KEY uk_ot_cosa (ot_id, cosa_trae_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Daños registrados por OT
CREATE TABLE IF NOT EXISTS taller_ot_danos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ot_id INT NOT NULL,
    zona VARCHAR(50) NOT NULL,
    tipo_dano_id INT NOT NULL,
    descripcion TEXT,
    posicion_x DECIMAL(5,2),
    posicion_y DECIMAL(5,2),
    foto_url VARCHAR(500),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (ot_id) REFERENCES taller_ordenes_trabajo(id) ON DELETE CASCADE,
    FOREIGN KEY (tipo_dano_id) REFERENCES taller_tipos_dano(id),
    INDEX idx_ot (ot_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Fotos por OT
CREATE TABLE IF NOT EXISTS taller_ot_fotos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ot_id INT NOT NULL,
    tipo ENUM('general', 'dano', 'documento') DEFAULT 'general',
    url VARCHAR(500) NOT NULL,
    descripcion VARCHAR(255),
    orden INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (ot_id) REFERENCES taller_ordenes_trabajo(id) ON DELETE CASCADE,
    INDEX idx_ot (ot_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Firmas por OT
CREATE TABLE IF NOT EXISTS taller_ot_firmas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ot_id INT NOT NULL UNIQUE,
    firma_cliente VARCHAR(500),
    firma_recepcion VARCHAR(500),
    fecha_firma_cliente DATETIME,
    fecha_firma_recepcion DATETIME,
    nombre_firma_cliente VARCHAR(255),
    nombre_firma_recepcion VARCHAR(255),
    FOREIGN KEY (ot_id) REFERENCES taller_ordenes_trabajo(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Cotizaciones
CREATE TABLE IF NOT EXISTS taller_cotizaciones (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ot_id INT NOT NULL,
    numero_cotizacion VARCHAR(20),
    subtotal DECIMAL(12,2) DEFAULT 0,
    iva DECIMAL(12,2) DEFAULT 0,
    total DECIMAL(12,2) DEFAULT 0,
    estado ENUM('borrador', 'enviada', 'aprobada', 'rechazada') DEFAULT 'borrador',
    fecha_aprobacion DATETIME,
    aprobado_por VARCHAR(255),
    notas TEXT,
    local_id VARCHAR(36),
    version INT DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (ot_id) REFERENCES taller_ordenes_trabajo(id) ON DELETE CASCADE,
    INDEX idx_ot (ot_id),
    INDEX idx_estado (estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Líneas de cotización
CREATE TABLE IF NOT EXISTS taller_cotizacion_lineas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    cotizacion_id INT NOT NULL,
    plu VARCHAR(24) NOT NULL,
    descripcion VARCHAR(255) NOT NULL,
    precio_unitario DECIMAL(12,2) NOT NULL,
    cantidad DECIMAL(10,3) DEFAULT 1,
    subtotal DECIMAL(12,2) NOT NULL,
    iva DECIMAL(12,2) DEFAULT 0,
    total DECIMAL(12,2) NOT NULL,
    es_servicio BOOLEAN DEFAULT FALSE,
    orden INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (cotizacion_id) REFERENCES taller_cotizaciones(id) ON DELETE CASCADE,
    INDEX idx_cotizacion (cotizacion_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Eventos de sincronización
CREATE TABLE IF NOT EXISTS taller_sync_events (
    id INT AUTO_INCREMENT PRIMARY KEY,
    event_id VARCHAR(36) NOT NULL UNIQUE,
    event_type VARCHAR(50) NOT NULL,
    entity_type VARCHAR(50) NOT NULL,
    local_id VARCHAR(36) NOT NULL,
    server_id INT,
    payload JSON NOT NULL,
    user_id INT,
    device_id VARCHAR(100),
    timestamp BIGINT NOT NULL,
    processed BOOLEAN DEFAULT FALSE,
    processed_at DATETIME,
    error TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_event_id (event_id),
    INDEX idx_processed (processed),
    INDEX idx_timestamp (timestamp)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
