-- Seed Data: Extrudex common reference data
-- Author: Hex
-- Date: 2026-05-06
--
-- IMPORTANT: IDs are explicitly assigned to satisfy the DEFAULT constraints:
--   - filament_spools.material_finish_id  DEFAULT 1  ("Basic")
--   - print_jobs.job_status_id            DEFAULT 1  ("pending")
--
-- Density values sourced from common manufacturer specifications.
-- Temperature ranges are conservative/typical; users can override per-spool.

BEGIN;

-- ============================================================================
-- Printer Types
-- ============================================================================

INSERT INTO printer_types (id, name) VALUES
    (1, 'fdm'),
    (2, 'resin')
ON CONFLICT (id) DO NOTHING;

-- Reset the sequence so future inserts start after our explicit IDs
SELECT setval('printer_types_id_seq', GREATEST(2, (SELECT MAX(id) FROM printer_types)));

-- ============================================================================
-- Job Statuses
-- ============================================================================

INSERT INTO job_statuses (id, name) VALUES
    (1, 'pending'),
    (2, 'printing'),
    (3, 'paused'),
    (4, 'completed'),
    (5, 'failed'),
    (6, 'cancelled')
ON CONFLICT (id) DO NOTHING;

SELECT setval('job_statuses_id_seq', GREATEST(6, (SELECT MAX(id) FROM job_statuses)));

-- ============================================================================
-- Material Bases (common filament types)
-- ============================================================================

INSERT INTO material_bases (id, name, density_g_cm3, extrusion_temp_min, extrusion_temp_max, bed_temp_min, bed_temp_max) VALUES
    (1, 'PLA',   1.24, 190, 220,  0,  60),
    (2, 'PETG',  1.27, 230, 250, 70,  90),
    (3, 'ABS',   1.04, 230, 260, 90, 110),
    (4, 'TPU',   1.21, 220, 250,  0,  60),
    (5, 'ASA',   1.07, 240, 260, 90, 110),
    (6, 'Nylon', 1.14, 240, 280, 70, 100),
    (7, 'PC',    1.20, 260, 310, 90, 120)
ON CONFLICT (id) DO NOTHING;

SELECT setval('material_bases_id_seq', GREATEST(7, (SELECT MAX(id) FROM material_bases)));

-- ============================================================================
-- Material Finishes
-- ============================================================================
-- ID 1 = "Basic" is the default for new spools (DEFAULT 1 constraint)

INSERT INTO material_finishes (id, name, description) VALUES
    (1, 'Basic',  'Standard solid-color filament with no special finish'),
    (2, 'Silk',   'Glossy silk-like sheen, often used for decorative prints'),
    (3, 'Matte',  'Flat non-reflective surface finish'),
    (4, 'Glossy', 'High-shine reflective surface'),
    (5, 'Satin',  'Semi-gloss between matte and glossy')
ON CONFLICT (id) DO NOTHING;

SELECT setval('material_finishes_id_seq', GREATEST(5, (SELECT MAX(id) FROM material_finishes)));

-- ============================================================================
-- Material Modifiers
-- ============================================================================

INSERT INTO material_modifiers (id, name, description) VALUES
    (1, 'Wood-Filled',   'Contains wood fibers for natural wood-like appearance and texture'),
    (2, 'Carbon Fiber',  'Reinforced with carbon fibers for increased stiffness and strength'),
    (3, 'Glow-in-Dark',  'Phosphorescent additive that glows after exposure to light'),
    (4, 'Marble',        'Contains specks for a stone-like marble appearance')
ON CONFLICT (id) DO NOTHING;

SELECT setval('material_modifiers_id_seq', GREATEST(4, (SELECT MAX(id) FROM material_modifiers)));

-- ============================================================================
-- Default Application Settings
-- ============================================================================

INSERT INTO settings (key, value, description) VALUES
    ('default_low_stock_threshold_grams', '50', 'Default grams threshold for low-stock alerts on new spools'),
    ('default_diameter_mm', '1.75', 'Default filament diameter for new spools (1.75mm is the modern standard)'),
    ('filament_cross_section_area_mm2', '2.405', 'Cross-sectional area for 1.75mm filament: π × (1.75/2)²')
ON CONFLICT (key) DO NOTHING;

COMMIT;
