# frozen_string_literal: true

module WorkItems
  class DeleteTaskService
    def initialize(work_item:, lock_version:, current_user: nil, task_params: {})
      @work_item = work_item
      @current_user = current_user
      @task_params = task_params
      @lock_version = lock_version
      @task = task_params[:task]
      @errors = []
    end

    def execute
      transaction_result = ::WorkItem.transaction do
        replacement_result = TaskListReferenceRemovalService.new(
          work_item: @work_item,
          task: @task,
          line_number_start: @task_params[:line_number_start],
          line_number_end: @task_params[:line_number_end],
          lock_version: @lock_version,
          current_user: @current_user
        ).execute

        break ::ServiceResponse.error(message: replacement_result.errors, http_status: 422) if replacement_result.error?

        delete_result = ::WorkItems::DeleteService.new(
          project: @task.project,
          current_user: @current_user
        ).execute(@task)

        if delete_result.error?
          @errors += delete_result.errors
          raise ActiveRecord::Rollback
        end

        delete_result
      end

      return transaction_result if transaction_result

      ::ServiceResponse.error(message: @errors, http_status: 422)
    end
  end
end
