-- PrintCenter Costeador / Cotizador - Actualización v1.0.2
-- Incluye v1.0.1 + nuevos parámetros de recargo de troquelado.
-- Valores internos: NETOS, sin IVA.

CREATE TABLE IF NOT EXISTS pc_schema_migrations (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    migration VARCHAR(190) NOT NULL,
    executed_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_pc_schema_migrations_migration (migration)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS pc_ink_coverage_presets (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    code VARCHAR(50) NOT NULL,
    name VARCHAR(120) NOT NULL,
    description VARCHAR(255) NULL,
    coverage_percent DECIMAL(8,2) NOT NULL DEFAULT 90.00,
    sort_order INT NOT NULL DEFAULT 0,
    is_default TINYINT(1) NOT NULL DEFAULT 0,
    active TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_pc_ink_coverage_presets_code (code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO pc_ink_coverage_presets
(code, name, description, coverage_percent, sort_order, is_default, active)
VALUES
('low', 'Baja / texto y logos simples', 'Trabajos con poca tinta, textos, líneas y logos simples.', 20.00, 10, 0, 1),
('medium', 'Media / diseño normal', 'Diseño gráfico habitual con imágenes o fondos parciales.', 45.00, 20, 0, 1),
('high', 'Alta / imagen con fondos parciales', 'Mayor carga de color y áreas importantes impresas.', 70.00, 30, 0, 1),
('full_color', 'Full color / fotográfica', 'Criterio recomendado por defecto para impresión full color CMYK.', 90.00, 40, 1, 1),
('solid_background', 'Fondo pleno / alta saturación', 'Fondos plenos, colores muy saturados o alta carga de tinta.', 120.00, 50, 0, 1),
('custom', 'Personalizada', 'Permite ingresar un porcentaje manual.', 90.00, 60, 0, 1)
ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    description = VALUES(description),
    coverage_percent = VALUES(coverage_percent),
    sort_order = VALUES(sort_order),
    is_default = VALUES(is_default),
    active = VALUES(active),
    updated_at = CURRENT_TIMESTAMP;

CREATE TABLE IF NOT EXISTS pc_die_cutting_presets (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    code VARCHAR(50) NOT NULL,
    name VARCHAR(120) NOT NULL,
    description VARCHAR(255) NULL,
    surcharge_percent DECIMAL(8,2) NOT NULL DEFAULT 35.00,
    minimum_net DECIMAL(14,2) NOT NULL DEFAULT 8000.00,
    sort_order INT NOT NULL DEFAULT 0,
    is_default TINYINT(1) NOT NULL DEFAULT 0,
    active TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_pc_die_cutting_presets_code (code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO pc_die_cutting_presets
(code, name, description, surcharge_percent, minimum_net, sort_order, is_default, active)
VALUES
('simple', 'Troquelado simple', 'Cortes simples, pocas curvas y preparación baja.', 20.00, 8000.00, 10, 0, 1),
('normal', 'Troquelado normal', 'Configuración recomendada por defecto.', 35.00, 8000.00, 20, 1, 1),
('complex', 'Troquelado complejo', 'Más curvas, más puntos de corte o mayor tiempo de prueba.', 50.00, 8000.00, 30, 0, 1),
('very_complex', 'Muy complejo / muchos cortes', 'Alta complejidad, muchas líneas, prueba extensa o mucho manipulado.', 70.00, 8000.00, 40, 0, 1),
('custom', 'Personalizado', 'Permite ingresar un porcentaje manual.', 35.00, 8000.00, 50, 0, 1)
ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    description = VALUES(description),
    surcharge_percent = VALUES(surcharge_percent),
    minimum_net = VALUES(minimum_net),
    sort_order = VALUES(sort_order),
    is_default = VALUES(is_default),
    active = VALUES(active),
    updated_at = CURRENT_TIMESTAMP;

CREATE TABLE IF NOT EXISTS pc_costing_settings (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    setting_key VARCHAR(120) NOT NULL,
    setting_value VARCHAR(255) NOT NULL,
    setting_type VARCHAR(30) NOT NULL DEFAULT 'string',
    description VARCHAR(255) NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_pc_costing_settings_key (setting_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO pc_costing_settings (setting_key, setting_value, setting_type, description)
VALUES
('die_cutting_default_code', 'normal', 'string', 'Preset predeterminado para troquelado.'),
('die_cutting_default_surcharge_percent', '35', 'decimal', 'Recargo predeterminado de troquelado sobre impresión neta.'),
('die_cutting_min_net', '8000', 'money', 'Mínimo neto de troquelado.'),
('iva_rate', '19', 'decimal', 'IVA para mostrar total con IVA cuando corresponda.')
ON DUPLICATE KEY UPDATE
    setting_value = VALUES(setting_value),
    setting_type = VALUES(setting_type),
    description = VALUES(description),
    updated_at = CURRENT_TIMESTAMP;

-- Columnas sugeridas para tabla principal de cotizaciones/presupuestos.
-- El actualizador PHP intenta agregarlas automáticamente si detecta la tabla real.
-- Si se ejecuta manualmente, adaptar `cotizaciones` al nombre real de la tabla.
-- ALTER TABLE cotizaciones ADD COLUMN ink_coverage_code VARCHAR(50) NULL DEFAULT 'full_color';
-- ALTER TABLE cotizaciones ADD COLUMN ink_coverage_percent DECIMAL(8,2) NULL DEFAULT 90.00;
-- ALTER TABLE cotizaciones ADD COLUMN has_printing TINYINT(1) NOT NULL DEFAULT 1;
-- ALTER TABLE cotizaciones ADD COLUMN has_die_cutting TINYINT(1) NOT NULL DEFAULT 0;
-- ALTER TABLE cotizaciones ADD COLUMN die_cutting_code VARCHAR(50) NULL DEFAULT 'normal';
-- ALTER TABLE cotizaciones ADD COLUMN die_cutting_surcharge_percent DECIMAL(8,2) NULL DEFAULT 35.00;
-- ALTER TABLE cotizaciones ADD COLUMN die_cutting_min_net DECIMAL(14,2) NOT NULL DEFAULT 8000.00;
-- ALTER TABLE cotizaciones ADD COLUMN die_cutting_surcharge_net DECIMAL(14,2) NOT NULL DEFAULT 0.00;
-- ALTER TABLE cotizaciones ADD COLUMN subtotal_printing_net DECIMAL(14,2) NOT NULL DEFAULT 0.00;
-- ALTER TABLE cotizaciones ADD COLUMN subtotal_die_cutting_net DECIMAL(14,2) NOT NULL DEFAULT 0.00;
-- ALTER TABLE cotizaciones ADD COLUMN subtotal_net DECIMAL(14,2) NOT NULL DEFAULT 0.00;
-- ALTER TABLE cotizaciones ADD COLUMN iva_amount DECIMAL(14,2) NOT NULL DEFAULT 0.00;
-- ALTER TABLE cotizaciones ADD COLUMN total_gross DECIMAL(14,2) NOT NULL DEFAULT 0.00;

INSERT IGNORE INTO pc_schema_migrations (migration) VALUES ('2026_05_20_update_troquelado_v1_0_2');
