class ApiMixesController < ApiController

  # This must be present on requests from the cron to prevent hackers from
  # hitting these routes.
  CRON_TOKEN = "2kkl39sjjf3ijdsflje2923j"

  before_filter :api_signed_in_user, :only => [ :schedule ]
  before_filter :require_cron_token, :only => [ :next, :finish ]
  before_filter :look_up_mix, :only => [ :finish ]

  respond_to :json

  
  def next
    begin
      mix = Mix.next(params[:server])
      respond_with responder: ApiResponder, :status => 204 if mix.nil?
      render :json => { :id => mix.id, :manifest => mix.manifest, :destination => mix.s3_url }, :status => 200
    rescue
     render :json => { :message => "next mix could not be found" }, :status => 403
    end
  end


  def download
    @mix = Mix.find(params[:id])
    raise JamPermissionError, "You can only download a mix you have claimed" unless @mix.can_download? current_user

    @mix.current_user = current_user
    @mix.update_download_count

    @mix.valid?
    if !@mix.errors.any?
      @mix.save!
      redirect_to @mix.sign_url(120, 'ogg', false) # !is_native_client? # no header to indicate this
    else
      render :json => { :message => "download limit surpassed" }, :status => 404
    end
  end

  private

  def look_up_mix
    @mix = Mix.find(params[:id])
    if @mix.nil? || (!@is_cron && @mix.owner_id != current_user.id)
      render :json => { :message => "mix not found" }, :status => 404 
    end
  end
  
  def require_cron_token
    render :json => { :message => "bad token" }, :status => 403 unless params[:token] == CRON_TOKEN
    @is_cron = true
  end

end
