class TournamentBackupJob < ApplicationJob
  queue_as :default
  limits_concurrency to: 1, key: ->(tournament, *) { "tournament:#{tournament.id}" }
  
  def perform(tournament, reason = nil)
    # Log information about the job
    Rails.logger.info("Creating backup for tournament ##{tournament.id} (#{tournament.name}), reason: #{reason || 'manual'}")
    
    # Create job status record
    job_name = "Backing up tournament"
    job_status = TournamentJobStatus.create!(
      tournament: tournament,
      job_name: job_name,
      status: "Running",
      details: "Reason: #{reason || 'manual'}"
    )
    
    begin
      # Execute the backup
      service = TournamentBackupService.new(tournament, reason)
      service.create_backup_raw
      
      # Remove the job status record on success
      TournamentJobStatus.complete_job(tournament.id, job_name)
    rescue => e
      # Update status to errored
      job_status.update(status: "Errored", details: "Error: #{e.message}")
      
      # Re-raise the error for SolidQueue to handle
      raise e
    end
  end
end 
