/**
 * User Role Assignment Script
 * 
 * Purpose: Assign roles to specific users after fresh database setup
 * 
 * Usage:
 * 1. Update the email addresses below with your actual users
 * 2. Run: psql -d royal_enfield_workflow -f scripts/assign-user-roles.sql
 * 
 * Roles:
 * - USER: Default role for all employees
 * - MANAGEMENT: Department heads, managers, auditors
 * - ADMIN: IT administrators, system managers
 */

-- ============================================
-- ASSIGN ADMIN ROLES
-- ============================================
-- Replace with your actual admin email addresses

UPDATE users 
SET role = 'ADMIN'
WHERE email IN (
  'admin@{{APP_DOMAIN}}',
  'it.admin@{{APP_DOMAIN}}',
  'system.admin@{{APP_DOMAIN}}'
  -- Add more admin emails here
);

-- Verify ADMIN users
SELECT 
  email, 
  display_name, 
  role,
  updated_at 
FROM users 
WHERE role = 'ADMIN'
ORDER BY email;

-- ============================================
-- ASSIGN MANAGEMENT ROLES
-- ============================================
-- Replace with your actual management email addresses

UPDATE users 
SET role = 'MANAGEMENT'
WHERE email IN (
  'manager1@{{APP_DOMAIN}}',
  'dept.head@{{APP_DOMAIN}}',
  'auditor@{{APP_DOMAIN}}'
  -- Add more management emails here
);

-- Verify MANAGEMENT users
SELECT 
  email, 
  display_name, 
  department,
  role,
  updated_at 
FROM users 
WHERE role = 'MANAGEMENT'
ORDER BY department, email;

-- ============================================
-- VERIFY ALL ROLES
-- ============================================

SELECT 
  role,
  COUNT(*) as user_count
FROM users 
WHERE is_active = true
GROUP BY role
ORDER BY 
  CASE role
    WHEN 'ADMIN' THEN 1
    WHEN 'MANAGEMENT' THEN 2
    WHEN 'USER' THEN 3
  END;

-- ============================================
-- EXAMPLE: Assign role by department
-- ============================================

-- Make all users in "IT" department as ADMIN
-- UPDATE users 
-- SET role = 'ADMIN'
-- WHERE department = 'IT' AND is_active = true;

-- Make all users in "Management" department as MANAGEMENT
-- UPDATE users 
-- SET role = 'MANAGEMENT'
-- WHERE department = 'Management' AND is_active = true;

-- ============================================
-- EXAMPLE: Assign role by designation
-- ============================================

-- Make all "Department Head" as MANAGEMENT
-- UPDATE users 
-- SET role = 'MANAGEMENT'
-- WHERE (designation ILIKE '%head%' OR designation ILIKE '%manager%') 
-- AND is_active = true;

-- ============================================
-- Display role summary
-- ============================================

\echo '\n✅ Role assignment complete!\n'
\echo 'Role Summary:'
SELECT 
  role,
  COUNT(*) as total_users,
  COUNT(CASE WHEN is_active = true THEN 1 END) as active_users
FROM users 
GROUP BY role
ORDER BY 
  CASE role
    WHEN 'ADMIN' THEN 1
    WHEN 'MANAGEMENT' THEN 2
    WHEN 'USER' THEN 3
  END;
