/** @file
  HDD Password Configuration Formset.

  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#include "HddPasswordHiiDataStruc.h"

formset
  guid      = HDD_PASSWORD_CONFIG_GUID,
  title     = STRING_TOKEN(STR_HDD_SECURITY_CONFIG),
  help      = STRING_TOKEN(STR_HDD_SECURITY_CONFIG),
  classguid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID,

  varstore HDD_PASSWORD_CONFIG,
  name = HDD_PASSWORD_CONFIG,
  guid = HDD_PASSWORD_CONFIG_GUID;

  form formid = FORMID_HDD_MAIN_FORM,
    title  = STRING_TOKEN(STR_HDD_SECURITY_CONFIG);

    label HDD_DEVICE_ENTRY_LABEL;
    label HDD_DEVICE_LABEL_END;

  endform;

  form
    formid = FORMID_HDD_DEVICE_FORM,
    title = STRING_TOKEN(STR_HDD_SECURITY_HD);

    subtitle text = STRING_TOKEN(STR_SECURITY_HDD_PWD_DESC);

    subtitle text = STRING_TOKEN(STR_NULL);

        subtitle text = STRING_TOKEN(STR_SECURITY_HDD_BANNER_ONE);
        subtitle text = STRING_TOKEN(STR_SECURITY_HDD_BANNER_TWO);
        subtitle text = STRING_TOKEN(STR_SECURITY_HDD_BANNER_THREE);
        subtitle text = STRING_TOKEN(STR_SECURITY_HDD_BANNER_FOUR);
        subtitle text = STRING_TOKEN(STR_SECURITY_HDD_BANNER_FIVE);

    subtitle text = STRING_TOKEN(STR_NULL);

    subtitle text = STRING_TOKEN(STR_HDD_PASSWORD_CONFIG);

    subtitle text = STRING_TOKEN(STR_NULL);

    grayoutif  TRUE;
    suppressif ideqvallist HDD_PASSWORD_CONFIG.SecurityStatus.Supported == 0;
        text
            help   = STRING_TOKEN(STR_EMPTY),
            text   = STRING_TOKEN(STR_SEC_SUPPORTED),
            text   = STRING_TOKEN(STR_YES),
            flags  = 0,
            key    = 0;
    endif;

    suppressif ideqvallist HDD_PASSWORD_CONFIG.SecurityStatus.Supported == 1;
        text
            help   = STRING_TOKEN(STR_EMPTY),
            text   = STRING_TOKEN(STR_SEC_SUPPORTED),
            text   = STRING_TOKEN(STR_NO),
            flags  = 0,
            key    = 0;
    endif;

    suppressif ideqvallist HDD_PASSWORD_CONFIG.SecurityStatus.Enabled == 0;
        text
            help   = STRING_TOKEN(STR_EMPTY),
            text   = STRING_TOKEN(STR_SEC_ENABLED),
            text   = STRING_TOKEN(STR_YES),
            flags  = 0,
            key    = 0;
    endif;

    suppressif ideqvallist HDD_PASSWORD_CONFIG.SecurityStatus.Enabled == 1;
        text
            help   = STRING_TOKEN(STR_EMPTY),
            text   = STRING_TOKEN(STR_SEC_ENABLED),
            text   = STRING_TOKEN(STR_NO),
            flags  = 0,
            key    = 0;
    endif;


    suppressif ideqvallist HDD_PASSWORD_CONFIG.SecurityStatus.Locked == 0;
        text
            help   = STRING_TOKEN(STR_EMPTY),
            text   = STRING_TOKEN(STR_SEC_LOCKED),
            text   = STRING_TOKEN(STR_YES),
            flags  = 0,
            key    = 0;
    endif;

    suppressif ideqvallist HDD_PASSWORD_CONFIG.SecurityStatus.Locked == 1;
        text
            help   = STRING_TOKEN(STR_EMPTY),
            text   = STRING_TOKEN(STR_SEC_LOCKED),
            text   = STRING_TOKEN(STR_NO),
            flags  = 0,
            key    = 0;
    endif;

    suppressif ideqvallist HDD_PASSWORD_CONFIG.SecurityStatus.Frozen == 0;
        text
            help   = STRING_TOKEN(STR_EMPTY),
            text   = STRING_TOKEN(STR_SEC_FROZEN),
            text   = STRING_TOKEN(STR_YES),
            flags  = 0,
            key    = 0;
    endif;

    suppressif ideqvallist HDD_PASSWORD_CONFIG.SecurityStatus.Frozen == 1;
        text
            help   = STRING_TOKEN(STR_EMPTY),
            text   = STRING_TOKEN(STR_SEC_FROZEN),
            text   = STRING_TOKEN(STR_NO),
            flags  = 0,
            key    = 0;
    endif;

    suppressif ideqvallist HDD_PASSWORD_CONFIG.SecurityStatus.UserPasswordStatus == 0;
        text
            help   = STRING_TOKEN(STR_EMPTY),
            text   = STRING_TOKEN(STR_HDD_USER_PASSWORD_STS),
            text   = STRING_TOKEN(STR_INSTALLED),
            flags  = 0,
            key    = 0;
    endif;

    suppressif ideqvallist HDD_PASSWORD_CONFIG.SecurityStatus.UserPasswordStatus == 1;
        text
            help   = STRING_TOKEN(STR_EMPTY),
            text   = STRING_TOKEN(STR_HDD_USER_PASSWORD_STS),
            text   = STRING_TOKEN(STR_NOT_INSTALLED),
            flags  = 0,
            key    = 0;
    endif;

    suppressif ideqvallist HDD_PASSWORD_CONFIG.SecurityStatus.MasterPasswordStatus == 0;
        text
            help   = STRING_TOKEN(STR_EMPTY),
            text   = STRING_TOKEN(STR_HDD_MASTER_PASSWORD_STS),
            text   = STRING_TOKEN(STR_INSTALLED),
            flags  = 0,
            key    = 0;
    endif;

    suppressif ideqvallist HDD_PASSWORD_CONFIG.SecurityStatus.MasterPasswordStatus == 1;
        text
            help   = STRING_TOKEN(STR_EMPTY),
            text   = STRING_TOKEN(STR_HDD_MASTER_PASSWORD_STS),
            text   = STRING_TOKEN(STR_NOT_INSTALLED),
            flags  = 0,
            key    = 0;
    endif;
    endif;

    subtitle text = STRING_TOKEN(STR_NULL);

    grayoutif ideqval HDD_PASSWORD_CONFIG.SecurityStatus.Supported == 0;
      checkbox varid  = HDD_PASSWORD_CONFIG.Request.UserPassword,
            prompt      = STRING_TOKEN(STR_HDD_USER_PASSWORD),
            help        = STRING_TOKEN(STR_HDD_USER_PASSWORD_HELP),
            flags       = INTERACTIVE | RESET_REQUIRED,
            key         = KEY_HDD_USER_PASSWORD,
      endcheckbox;
    endif;

    grayoutif ideqval HDD_PASSWORD_CONFIG.SecurityStatus.Supported == 0;
      checkbox varid  = HDD_PASSWORD_CONFIG.Request.MasterPassword,
            prompt      = STRING_TOKEN(STR_HDD_MASTER_PASSWORD),
            help        = STRING_TOKEN(STR_HDD_MASTER_PASSWORD_HELP),
            flags       = INTERACTIVE | RESET_REQUIRED,
            key         = KEY_HDD_MASTER_PASSWORD,
      endcheckbox;
    endif;
  endform;

endformset;
