/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
#include <random>
#include <string>
#include "ctime"
#include "TransactionalIdFactory.h"

const std::string TransactionalIdFactory::TRANSACTIONAL_ID_DELIMITER = "-";

std::string generateRandomString(size_t length)
{
    const std::string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    std::random_device rd;
    std::mt19937 generator(rd());
    std::uniform_int_distribution<size_t> distribution(0, chars.size() - 1);

    std::string randomString;
    for (size_t i = 0; i < length; ++i) {
        randomString += chars[distribution(generator)];
    }

    return randomString;
}

std::string TransactionalIdFactory::buildTransactionalId(
    const std::string& transactionalIdPrefix, int subtaskId, long checkpointOffset)
{
    return transactionalIdPrefix + TRANSACTIONAL_ID_DELIMITER + std::to_string(subtaskId) + TRANSACTIONAL_ID_DELIMITER +
           std::to_string(checkpointOffset) + generateRandomString(randomStrLen);
}