import {
    Context,
    createConnectorCustomizer,
    readConfig,
    logger,
    StdAccountReadOutput,
    StdTestConnectionOutput,
    StdAccountListOutput,
    StdTestConnectionInput,
} from '@sailpoint/connector-sdk'

// Connector customizer must be exported as module property named connectorCustomizer
export const connectorCustomizer = async () => {

    // Get connector source config
    const config = await readConfig()

    return createConnectorCustomizer()
        .afterStdTestConnection(async (context: Context, output: StdTestConnectionOutput) => {
            logger.info('Running after test connection')
            return output
        })
        .afterStdAccountRead(async (context: Context, output: StdAccountReadOutput) => {
            logger.info('before Account Read output: ' + JSON.stringify(output))
            if (output.attributes.identityStatus === 'DISABLED' 
                && (output.attributes.identityState === 'INACTIVE_LONG_TERM' || output.attributes.identityState === 'INACTIVE_SHORT_TERM')) {
                logger.info(`Changing disable status in Account Read`)
                output.disabled = true
            } else {
                output.disabled = false
            }
            logger.info('after Account Read output: ' + JSON.stringify(output))
            return output
        })
        .afterStdAccountList(async (context: Context, output: StdAccountListOutput) => {
            logger.info('before Account List output: ' + JSON.stringify(output))
            if (output.attributes.identityStatus === 'DISABLED' 
                && (output.attributes.identityState === 'INACTIVE_LONG_TERM' || output.attributes.identityState === 'INACTIVE_SHORT_TERM')) {
                logger.info(`Changing disable status in Account List`)
                output.disabled = true
            } else {
                output.disabled = false
            }
            logger.info('after Account List output: ' + JSON.stringify(output))
            return output
        })

}