#include "ShardPartitionPiece.h"

#include "ShardPartition.h"
#include "TaskShard.h"

#include <IO/WriteHelpers.h>

namespace DB
{

ShardPartitionPiece::ShardPartitionPiece(ShardPartition & parent, size_t current_piece_number_, bool is_present_piece_)
    : is_absent_piece(!is_present_piece_)
    , current_piece_number(current_piece_number_)
    , shard_partition(parent)
{
}

String ShardPartitionPiece::getPartitionPiecePath() const
{
    return shard_partition.getPartitionPath() + "/piece_" + toString(current_piece_number);
}

String ShardPartitionPiece::getPartitionPieceCleanStartPath() const
{
    return getPartitionPiecePath() + "/clean_start";
}

String ShardPartitionPiece::getPartitionPieceIsDirtyPath() const
{
    return getPartitionPiecePath() + "/is_dirty";
}

String ShardPartitionPiece::getPartitionPieceIsCleanedPath() const
{
    return getPartitionPieceIsDirtyPath() + "/cleaned";
}

String ShardPartitionPiece::getPartitionPieceActiveWorkersPath() const
{
    return getPartitionPiecePath() + "/partition_piece_active_workers";
}

String ShardPartitionPiece::getActiveWorkerPath() const
{
    return getPartitionPieceActiveWorkersPath() + "/" + toString(shard_partition.task_shard.numberInCluster());
}

/// On what shards do we have current partition.
String ShardPartitionPiece::getPartitionPieceShardsPath() const
{
    return getPartitionPiecePath() + "/shards";
}

String ShardPartitionPiece::getShardStatusPath() const
{
    return getPartitionPieceShardsPath() + "/" + toString(shard_partition.task_shard.numberInCluster());
}

String ShardPartitionPiece::getPartitionPieceCleanerPath() const
{
    return getPartitionPieceIsDirtyPath() + "/cleaner";
}

}