-- Link tmodule_customers til Hub customers baseret på navn match
-- Dette script kører automatisk ved opstart og kan også køres manuelt

-- Drop eksisterende funktion hvis den findes
DROP FUNCTION IF EXISTS link_tmodule_customers_to_hub();

-- Funktion til at linke kunder baseret på navn
CREATE OR REPLACE FUNCTION link_tmodule_customers_to_hub()
RETURNS TABLE (
    tmodule_id INTEGER,
    tmodule_name TEXT,
    hub_id INTEGER,
    hub_name TEXT,
    action TEXT
) AS $$
BEGIN
    RETURN QUERY
    WITH matches AS (
        -- Find eksakte navn matches
        SELECT 
            tc.id as tmodule_id,
            tc.name::TEXT as tmodule_name,
            c.id as hub_id,
            c.name::TEXT as hub_name,
            'exact_match'::TEXT as action
        FROM tmodule_customers tc
        JOIN customers c ON LOWER(TRIM(tc.name)) = LOWER(TRIM(c.name))
        WHERE tc.hub_customer_id IS NULL
    ),
    updates AS (
        -- Opdater tmodule_customers med hub_customer_id
        UPDATE tmodule_customers tc
        SET hub_customer_id = m.hub_id,
            updated_at = CURRENT_TIMESTAMP
        FROM matches m
        WHERE tc.id = m.tmodule_id
        RETURNING tc.id, tc.name::TEXT, m.hub_id, m.hub_name, m.action
    )
    SELECT * FROM updates;
END;
$$ LANGUAGE plpgsql;

-- Kør linking
SELECT * FROM link_tmodule_customers_to_hub();

-- Trigger til automatisk linking ved insert/update af tmodule_customers
CREATE OR REPLACE FUNCTION auto_link_tmodule_customer()
RETURNS TRIGGER AS $$
DECLARE
    matched_hub_id INTEGER;
BEGIN
    -- Hvis hub_customer_id allerede er sat, skip
    IF NEW.hub_customer_id IS NOT NULL THEN
        RETURN NEW;
    END IF;
    
    -- Find matching hub customer baseret på navn
    SELECT id INTO matched_hub_id
    FROM customers
    WHERE LOWER(TRIM(name)) = LOWER(TRIM(NEW.name))
    LIMIT 1;
    
    -- Hvis match fundet, sæt hub_customer_id
    IF matched_hub_id IS NOT NULL THEN
        NEW.hub_customer_id := matched_hub_id;
    END IF;
    
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Drop trigger hvis den eksisterer
DROP TRIGGER IF EXISTS trigger_auto_link_tmodule_customer ON tmodule_customers;

-- Opret trigger der kører før INSERT eller UPDATE
CREATE TRIGGER trigger_auto_link_tmodule_customer
    BEFORE INSERT OR UPDATE OF name
    ON tmodule_customers
    FOR EACH ROW
    EXECUTE FUNCTION auto_link_tmodule_customer();

COMMENT ON FUNCTION link_tmodule_customers_to_hub() IS 'Linker eksisterende tmodule_customers til Hub customers baseret på navn match';
COMMENT ON FUNCTION auto_link_tmodule_customer() IS 'Automatisk linker nye/opdaterede tmodule_customers til Hub customers';
COMMENT ON TRIGGER trigger_auto_link_tmodule_customer ON tmodule_customers IS 'Auto-linker tmodule customers til Hub customers ved navn match';
