/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2022-2024. All rights reserved.
 */
package zip4cj.tasks

public class SetCommentTask <: AsyncZipTask<SetCommentTaskTaskParameters> {
    private let zipModel: ZipModel

    public SetCommentTask(zipModel: ZipModel, asyncTaskParameters: AsyncTaskParameters) {
        super(asyncTaskParameters)
        this.zipModel = zipModel
    }

    protected func executeTask(taskParameters: SetCommentTaskTaskParameters, progressMonitor: ProgressMonitor) {
        taskParameters
        var endOfCentralDirectoryRecord: EndOfCentralDirectoryRecord = zipModel.getEndOfCentralDirectoryRecord()
        endOfCentralDirectoryRecord.setComment(taskParameters.comment)

        try (outputStream = SplitOutputStream(zipModel.getZipFile())) {
            if (zipModel.isZip64Format()) {
                outputStream.seek(
                    zipModel.getZip64EndOfCentralDirectoryRecord().getOffsetStartCentralDirectoryWRTStartDiskNumber())
            } else {
                outputStream.seek(endOfCentralDirectoryRecord.getOffsetOfStartOfCentralDirectory())
            }

            var headerWriter: HeaderWriter = HeaderWriter()
            headerWriter.finalizeZipFileWithoutValidations(zipModel, outputStream)
        }
    }

    protected func calculateTotalWork(taskParameters: SetCommentTaskTaskParameters): Int64 {
        taskParameters
        return 0
    }

    protected func getTask(): ProgressMonitorTask {
        return ProgressMonitorTask.SET_COMMENT
    }
}