-- Identity Inactive Cleanup Migration
-- Date: 2026-05-14
-- Purpose: Mark auto-generated identities with no face_detection references as 'inactive'
-- Run after pipeline completes to clean up orphaned auto identities

BEGIN;

-- Mark auto identities as inactive if they have zero face_detection references
UPDATE identities
SET status = 'inactive',
    metadata = metadata || jsonb_build_object('inactivated_at', NOW()::text, 'reason', 'no_face_references')
WHERE source = 'auto'
  AND status != 'inactive'
  AND id NOT IN (
    SELECT DISTINCT identity_id FROM face_detections WHERE identity_id IS NOT NULL
  );

-- Delete identity_bindings pointing to newly inactive identities
DELETE FROM identity_bindings
WHERE identity_id IN (
    SELECT id FROM identities WHERE status = 'inactive'
);

-- Log
DO $$
DECLARE
    marked INT;
BEGIN
    SELECT COUNT(*) INTO marked FROM identities WHERE status = 'inactive' AND metadata->>'reason' = 'no_face_references';
    RAISE NOTICE 'Marked % auto identities as inactive (no face references)', marked;
END $$;

COMMIT;
