class OrdersController < ArtfullyOseController
  def index
    authorize! :manage, Order
    request.format = :csv if params[:commit] == "Download"
    if params[:search]
      @results = search(params[:search]).sort{|a,b| b.created_at <=> a.created_at }
      if @results.length == 1
        redirect_to order_path(@results.first.id)
      end
    else
      @results = current_organization.orders.includes(:person, :items).all.sort{|a,b| b.created_at <=> a.created_at }
    end
    respond_to do |format|
      format.html { @results = @results.paginate(:page => params[:page], :per_page => 25) }
      format.csv do
        filename = "Artfully-Orders-Export-#{DateTime.now.strftime("%m-%d-%y")}.csv"
        send_data @results.to_comma, :filename => filename, :type => "text/csv", :disposition => "attachment"
      end
    end
  end

  def show
    @order = Order.includes(:items => :discount).find(params[:id])
    authorize! :view, @order
    @person = Person.find(@order.person_id)
    @total = @order.total
  end

  def update
    @order = Order.find(params[:id])
    authorize! :manage, Order

    if @order.update_attributes(:notes => params[:order][:notes])
      flash[:success] = "Successfully updated order #{@order.id}."
    else
      flash[:error] = "Could not update order #{@order.id}."
    end
    redirect_to order_path(@order)
  end

  def resend
    authorize! :view, Order
    @order = Order.find(params[:id])
    OrderMailer.delay.confirmation_for(@order)
    
    flash[:notice] = "A copy of the order receipt has been sent to #{@order.person.email}"
    redirect_to order_url(@order)
  end

  def sales
    authorize! :view, Order

    @organization = current_organization
    @event = Event.find_by_id(params[:event_id]) if params[:event_id].present?
    @events = @organization.events
    @show = @event.shows.find_by_id(params[:show_id]) if @event && params[:show_id].present?
    @shows = @event.shows if @event
    request.format = :csv if params[:commit] == "Download"

    search_terms = {
      :start        => params[:start],
      :stop         => params[:stop],
      :organization => @organization,
      :event        => @event,
      :show         => @show
    }

    respond_to do |format|
      format.html do
        @search = SaleSearch.new(search_terms) do |results|
          results.paginate(:page => params[:page], :per_page => 25)
        end
      end
      format.csv do
        filename = "Artfully-Ticket-Sales-Export-#{DateTime.now.strftime("%m-%d-%y")}.csv"
        items = ItemView.where(:product_type => "Ticket")
                             .where('created_at > ? ', search_terms[:start]) 
                             .where('created_at < ?',  Sundial.midnightish(current_organization, search_terms[:stop]))
                             .where('organization_id = ?', current_organization)
                             .order('created_at desc')
        items = items.where('event_id = ?', @event.id)  if @event
        items = items.where('show_id = ?', @show.id)    if @show
        csv_string = items.all.to_comma(:ticket_sale)
        send_data csv_string, :filename => filename, :type => "text/csv", :disposition => "attachment"
      end
    end
  end

  private

  def search(query)
    Order.search_index(query, current_user.current_organization)
  end

end