-- ============================================================
-- persons_migration.sql
-- Skapar ett samlat personkoncept som kopplar samman
-- handlaggare-rollen och portal-inlogg (chef/admin).
-- Kör i phpMyAdmin, ett block i taget uppifrån och ner.
-- ============================================================

-- ── Steg 1: Skapa persons-tabellen ──────────────────────────
CREATE TABLE IF NOT EXISTS persons (
  id         VARCHAR(36)  NOT NULL PRIMARY KEY,
  name       VARCHAR(255) NOT NULL,
  email      VARCHAR(255) NULL,
  phone      VARCHAR(50)  NULL,
  created_at DATETIME     DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ── Steg 2: Lägg till person_id på handlaggare ──────────────
ALTER TABLE handlaggare
  ADD COLUMN IF NOT EXISTS person_id VARCHAR(36) NULL AFTER id;

ALTER TABLE handlaggare
  ADD INDEX IF NOT EXISTS idx_h_person_id (person_id);

-- ── Steg 3: Lägg till person_id på portal_users ─────────────
ALTER TABLE portal_users
  ADD COLUMN IF NOT EXISTS person_id VARCHAR(36) NULL AFTER id;

ALTER TABLE portal_users
  ADD INDEX IF NOT EXISTS idx_pu_person_id (person_id);

-- ── Steg 4: Skapa persons från portal_users (med e-post) ─────
-- En rad per unik e-postadress. portal_users är startpunkten
-- eftersom de alltid har e-post och namn.
INSERT INTO persons (id, name, email, phone)
SELECT UUID(), name, LOWER(email), phone
FROM portal_users
WHERE email IS NOT NULL AND email != '';

-- ── Steg 5: Koppla portal_users → persons via e-post ─────────
UPDATE portal_users pu
INNER JOIN persons p ON p.email = LOWER(pu.email)
SET pu.person_id = p.id
WHERE pu.email IS NOT NULL AND pu.email != '';

-- ── Steg 6: Skapa persons för portal_users utan e-post ───────
INSERT INTO persons (id, name, email, phone)
SELECT UUID(), name, NULL, phone
FROM portal_users
WHERE person_id IS NULL;

-- Länka dem (matchas på namn + NULL-email)
UPDATE portal_users pu
INNER JOIN persons p ON p.name = pu.name AND p.email IS NULL
SET pu.person_id = p.id
WHERE pu.person_id IS NULL;

-- ── Steg 7: Koppla handlaggare → befintliga persons via e-post
UPDATE handlaggare h
INNER JOIN persons p ON p.email = LOWER(h.email)
SET h.person_id = p.id
WHERE h.email IS NOT NULL AND h.email != '' AND h.person_id IS NULL;

-- ── Steg 8: Skapa persons för handlaggare som ej matchade ────
-- (handlaggare utan e-post, eller med e-post som inte finns i portal_users)
INSERT INTO persons (id, name, email, phone)
SELECT UUID(),
       h.name,
       NULLIF(LOWER(TRIM(h.email)), ''),
       h.phone
FROM handlaggare h
WHERE h.person_id IS NULL;

-- ── Steg 9: Koppla kvarvarande handlaggare → persons ─────────
-- Matcha via e-post för de som fick e-post i steg 8
UPDATE handlaggare h
INNER JOIN persons p ON p.email = LOWER(h.email)
SET h.person_id = p.id
WHERE h.person_id IS NULL AND h.email IS NOT NULL AND h.email != '';

-- Matcha de utan e-post via namn (sista utväg)
UPDATE handlaggare h
INNER JOIN persons p ON p.name = h.name AND p.email IS NULL
SET h.person_id = p.id
WHERE h.person_id IS NULL;

-- ── Kontroll: handlaggare och portal_users utan person_id ────
-- Kör dessa SELECT för att se om något förblev okopplat.
-- Om rader returneras behöver de kopplas manuellt i admin-UI:t.
-- SELECT id, name, email FROM handlaggare WHERE person_id IS NULL;
-- SELECT id, name, email FROM portal_users WHERE person_id IS NULL;
