import {
    SQSClient,
    ReceiveMessageCommand,
    DeleteMessageCommand,
    DeleteMessageBatchCommand,
    ReceiveMessageCommandInput,
    DeleteMessageCommandInput,
    DeleteMessageBatchCommandInput
} from "@aws-sdk/client-sqs";
import { v4 as uuid } from "uuid";
import { SqsConfig } from "./sqs.config";


const client: SQSClient = new SQSClient(
    {
        region: SqsConfig.region,
        endpoint: SqsConfig.endpoint,
        credentials: SqsConfig.credentials,
    }
);

const params: ReceiveMessageCommandInput = {
    AttributeNames: ["SentTimestamp"],
    MaxNumberOfMessages: 10,
    MessageAttributeNames: ["All"],
    QueueUrl: `${SqsConfig.endpoint}/${SqsConfig.accountId}/${SqsConfig.queueName}`,
    VisibilityTimeout: 20,
    WaitTimeSeconds: 0,
};

const command: ReceiveMessageCommand = new ReceiveMessageCommand(params);


client.send(command).then((response) => {
    if (response.Messages) {
        console.log(JSON.stringify(response.Messages, null, 2));
        const deleteParams: DeleteMessageBatchCommandInput = {
            QueueUrl: `${SqsConfig.endpoint}/${SqsConfig.accountId}/${SqsConfig.queueName}`,
            Entries: response.Messages.map((message) => ({
                ReceiptHandle: message.ReceiptHandle,
                Id: uuid(),
            }))
        };

        client.send(new DeleteMessageBatchCommand(deleteParams)).then(() => {
            console.log("Message deleted");
        }).catch((error) => {
            console.log(error);
        });
    }
}).catch((error) => {
    console.error(error);
});