################################################################################
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0
################################################################################

import json
from common.encoder import PythonObjectEncoder


def publish_sqs_task_for_execution(
    controller, accounts, principal_type, principal_id, permission_set_arn, action
):
    payload = []
    results = []
    for idx, account in enumerate(accounts):
        entry = {
            "Id": f"{idx}",
            "MessageBody": json.dumps(
                {
                    "TargetId": account,
                    "PrincipalType": principal_type,
                    "PrincipalId": principal_id,
                    "PermissionSetArn": permission_set_arn,
                    "Action": action,
                },
                indent=2,
                cls=PythonObjectEncoder,
            ),
        }
        controller.clients.logger.info("Uppending entry to array")
        controller.clients.logger.info(entry)
        payload.append(entry)

        ## TODO refactor to look nice. Unfortunately we can send only in batches of 10.
        if (idx + 1) / 10 == 0:
            controller.client.logger.info("Publishing array")
            results.append(
                controller.clients.sqs.send_message_batch(
                    QueueUrl=controller.config.queue_url, Entries=payload
                )
            )
            payload = []
    if payload:
        controller.clients.logger.info("Publishing array")
        results.append(
            controller.clients.sqs.send_message_batch(
                QueueUrl=controller.config.queue_url, Entries=payload
            )
        )
    return results