# Copyright Project Harbor Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#	http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License

*** Settings ***
Documentation  This resource provides any keywords related to the Harbor private registry appliance
Resource  ../../resources/Util.robot

*** Variables ***

*** Keywords ***
Delete Success
    [Arguments]  @{obj}
    FOR  ${obj}  IN  @{obj}
        Retry Wait Until Page Contains Element  //*[@id='contentAll']//div[contains(.,'${obj}')]/../div/clr-icon[@shape='success-standard']
    END

Delete Fail
    [Arguments]  @{obj}
    FOR  ${obj}  IN  @{obj}
        Retry Wait Until Page Contains Element  //*[@id='contentAll']//div[contains(.,'${obj}')]/../div/clr-icon[@shape='error-standard']
    END
    Sleep  1

Filter Object
#Filter project repo user tag.
    [Arguments]    ${kw}
    Retry Element Click  xpath=//hbr-filter//clr-icon
    ${element}=  Set Variable  xpath=//hbr-filter//input
    Wait Until Element Is Visible And Enabled  ${element}
    Retry Clear Element Text  ${element}
    Retry Text Input   ${element}  ${kw}
    Sleep  3

Filter Project
    [Arguments]    ${kw}
    Retry Element Click  ${logs_xpath}
    Retry Element Click  ${projects_xpath}
    Filter Object  ${kw}

Select Object
#select single element such as user project repo tag
    [Arguments]    ${obj}
    Retry Element Click  xpath=//clr-dg-row[contains(.,'${obj}')]//label[contains(@class,'clr-control-label')]

Multi-delete Object
    [Arguments]    ${delete_btn}  @{obj}
    FOR  ${obj}  IN  @{obj}
        ${element}=  Set Variable  xpath=//clr-dg-row[contains(.,'${obj}')]//label[contains(@class,'clr-control-label')]
        Retry Element Click  ${element}
    END
    Sleep  1
    Retry Element Click  ${delete_btn}
    Sleep  1
    Retry Element Click  ${repo_delete_on_card_view_btn}
    Sleep  1
    Sleep  1

# This func cannot support as the delete user flow changed.
Multi-delete Artifact
    [Arguments]  @{obj}
    FOR  ${obj}  IN  @{obj}
        ${element}=  Set Variable  xpath=//clr-dg-row[contains(.,'${obj}')]//label[contains(@class,'clr-control-label')]
        Retry Element Click  ${element}
    END
    Sleep  1
    Retry Element Click  ${artifact_action_xpath}
    Sleep  1
    Retry Element Click  ${artifact_action_delete_xpath}
    Sleep  1
    Retry Element Click  ${repo_delete_on_card_view_btn}
    Sleep  1
    Sleep  1

Multi-delete User
    [Arguments]    @{obj}
    FOR  ${obj}  IN  @{obj}
        Retry Element Click  //clr-dg-row[contains(.,'${obj}')]//label[contains(@class,'clr-control-label')]
    END
    Retry Element Click  ${member_action_xpath}
    Retry Element Click  //*[@id='deleteUser']
    Retry Double Keywords When Error  Retry Element Click  ${delete_btn}  Retry Wait Until Page Not Contains Element  ${delete_btn}


Multi-delete Member
    [Arguments]    @{obj}
    FOR  ${obj}  IN  @{obj}
        Retry Element Click  //clr-dg-row[contains(.,'${obj}')]//div[contains(@class,'clr-checkbox-wrapper')]/label[contains(@class,'clr-control-label')]
    END
    Retry Double Keywords When Error  Retry Element Click  ${member_action_xpath}  Retry Wait Until Page Contains Element  ${delete_action_xpath}
    Retry Double Keywords When Error  Retry Element Click  ${delete_action_xpath}  Retry Wait Until Page Contains Element  ${delete_btn}
    Retry Double Keywords When Error  Retry Element Click  ${delete_btn}  Retry Wait Until Page Not Contains Element  ${delete_btn}


Multi-delete Object Without Confirmation
    [Arguments]    @{obj}
    FOR  ${obj}  IN  @{obj}
        Retry Element Click  //clr-dg-row[contains(.,'${obj}')]//label[contains(@class,'clr-control-label')]
    END
    Retry Double Keywords When Error  Retry Element Click  ${delete_btn_2}  Retry Wait Until Page Not Contains Element  ${delete_btn_2}


Select All On Current Page Object
    Retry Element Click  //div[@class='datagrid-head']//label[contains(@class,'clr-control-label')]