START TRANSACTION;

INSERT INTO permissions (
    id,
    name,
    resource,
    action,
    display_name,
    description,
    created_at,
    updated_at
) VALUES
    (
        UUID(),
        'view-attendance-request',
        'attendance-request',
        'view',
        'View Attendance Request',
        'View attendance requests',
        NOW(),
        NOW()
    ),
    (
        UUID(),
        'create-attendance-request',
        'attendance-request',
        'create',
        'Create Attendance Request',
        'Submit attendance requests',
        NOW(),
        NOW()
    ),
    (
        UUID(),
        'edit-attendance-request',
        'attendance-request',
        'edit',
        'Edit Attendance Request',
        'Edit pending attendance requests',
        NOW(),
        NOW()
    ),
    (
        UUID(),
        'approve-attendance-request',
        'attendance-request',
        'approve',
        'Approve Attendance Request',
        'Approve or reject attendance requests',
        NOW(),
        NOW()
    ),
    (
        UUID(),
        'view-break-reports',
        'reports',
        'view-break-reports',
        'Break',
        'View break reports',
        NOW(),
        NOW()
    ),
    (
        UUID(),
        'view-pay-slip-reports',
        'reports',
        'view-pay-slip-reports',
        'Pay Slip',
        'View pay slip reports',
        NOW(),
        NOW()
    )
ON DUPLICATE KEY UPDATE
    resource = VALUES(resource),
    action = VALUES(action),
    display_name = VALUES(display_name),
    description = VALUES(description),
    updated_at = NOW();

INSERT IGNORE INTO role_has_permissions (
    role_id,
    permission_id,
    created_at,
    updated_at
)
SELECT
    roles.id,
    permissions.id,
    NOW(),
    NOW()
FROM roles
JOIN permissions
    ON permissions.name IN (
        'view-attendance-request',
        'create-attendance-request',
        'edit-attendance-request',
        'approve-attendance-request',
        'view-break-reports',
        'view-pay-slip-reports'
    )
WHERE roles.company_id IS NOT NULL
  AND roles.name IN ('admin', 'manager', 'super_admin')
  AND roles.deleted_at IS NULL;

INSERT IGNORE INTO role_has_permissions (
    role_id,
    permission_id,
    created_at,
    updated_at
)
SELECT
    roles.id,
    permissions.id,
    NOW(),
    NOW()
FROM roles
JOIN permissions
    ON permissions.name IN (
        'view-attendance-request',
        'create-attendance-request',
        'edit-attendance-request'
    )
WHERE roles.company_id IS NOT NULL
  AND roles.name = 'employee'
  AND roles.deleted_at IS NULL;

COMMIT;
