package com.airlock.iam.admin.application.service.permission.provider;

import com.airlock.iam.admin.application.service.permission.PagePermissions;
import com.airlock.iam.admin.application.service.permission.PagePermissionsProvider;
import com.airlock.iam.admin.application.system.AdminappPage;
import com.airlock.iam.admin.domain.model.administrator.ExtendedCurrentAdministrator;
import com.airlock.iam.admin.domain.model.administrator.permissions.AdministratorManagementPermissions;
import jakarta.inject.Inject;
import jakarta.inject.Provider;

public class AdminDetailPermissionsProvider implements PagePermissionsProvider {
   private final Provider<ExtendedCurrentAdministrator> currentAdministrator;

   @Inject
   public AdminDetailPermissionsProvider(Provider<ExtendedCurrentAdministrator> currentAdministrator) {
      this.currentAdministrator = currentAdministrator;
   }

   @Override
   public AdminappPage page() {
      return AdminappPage.ADMIN_DETAIL;
   }

   @Override
   public boolean applicableInRecoveryMode() {
      return false;
   }

   @Override
   public PagePermissions getPagePermissions() {
      AdministratorManagementPermissions permissions = ((ExtendedCurrentAdministrator)this.currentAdministrator.get()).permissions().administrationManagement();
      return PagePermissions.builder()
         .accessible(permissions.view())
         .defaultPermission(permissions.edit() ? PagePermissions.DefaultPermission.WRITE : PagePermissions.DefaultPermission.READ)
         .permission("save", permissions.edit())
         .permission("delete", permissions.delete())
         .permission("lock", permissions.lock())
         .permission("lockReason", permissions.lock())
         .permission("unlock", permissions.unlock())
         .permission("deletePassword", permissions.deletePassword())
         .permission("generatePassword", permissions.generatePassword())
         .build();
   }
}
