class ContestnotificationsController < ApplicationController
  # GET /contestnotifications
  # GET /contestnotifications.json
  layout 'base_newcontest'
  default_search_scope :contestnotifications
  model_object Contestnotification
  # before_filter :find_model_object, :except => [:new, :create, :index]
  # before_filter :find_contest_from_association, :except => [:new, :create, :index]
  before_filter :find_contest_by_contest_id, :only => [:new, :create]
  before_filter :find_contest
  before_filter :find_author
  # before_filter :authorize, :except => [:index]
  before_filter :find_optional_contest, :only => [:index]
  accept_rss_auth :index
  accept_api_auth :index

  before_filter :access_edit_destroy, only: [:edit ,:update, :destroy]

  def find_author
    @user = @contest.author
    render_404 if @user.nil?
  end
  def find_contest
    @contest = Contest.find(params[:contest_id])
    render_404 if @contest.nil?
  end


  def index
  
    # @contestnotifications = Contestnotification.all
    #
    # respond_to do |format|
    # format.html # index.html.erb
    # format.json { render json: @contestnotifications }
    # end

    ### begin ###
    case params[:format]
      when 'xml', 'json'
        @offset, @limit = api_offset_and_limit
      else
        @limit = 10
    end

    scope = @contest ? @contest.contestnotifications.visible : Contestnotifications.visible

    @contestnotifications_count = scope.count
    @contestnotifications_pages = Paginator.new @contestnotifications_count, @limit, params['page']
    @offset ||= @contestnotifications_pages.offset
    @contestnotificationss = scope.all(:include => [:author, :contest],
                                       :order => "#{Contestnotification.table_name}.created_at DESC",
                                       :offset => @offset,
                                       :limit => @limit)

    respond_to do |format|
      format.html {
        @contestnotification = Contestnotification.new # for adding news inline
        render :layout => 'base_newcontest'
      }
      format.api
      format.atom { render_feed(@contestnotificationss, :title => (@contest ? @contest.name : Setting.app_title) + ": #{l(:label_contest_notification)}") }
    end
    ### end ###
  end

  # GET /contestnotifications/1
  # GET /contestnotifications/1.json
  def show
     @contestnotification = Contestnotification.find(params[:id])
   
    #
    # respond_to do |format|
    # format.html # show.html.erb
    # format.json { render json: @contestnotification }
    # end
    @notificationcomments = @contestnotification.notificationcomments
    @notificationcomments.reverse! if User.current.wants_notificationcomments_in_reverse_order?
    render :layout => 'base_newcontest'

  end

  # GET /contestnotifications/new
  # GET /contestnotifications/new.json
  def new
    # @contestnotification = Contestnotification.new
# 
    # respond_to do |format|
      # format.html # new.html.erb
      # format.json { render json: @contestnotification }
    # end
    @contestnotification = Contestnotification.new(:contest => @contest, :author => User.current)
    render :layout => 'base_newcontest'
  end

  # GET /contestnotifications/1/edit
  def edit
    @contestnotification = Contestnotification.find(params[:id])
  end

  # POST /contestnotifications
  # POST /contestnotifications.json
  def create
    # @contestnotification = Contestnotification.new(params[:contestnotification])
    #
    # respond_to do |format|
    # if @contestnotification.save
    # format.html { redirect_to @contestnotification, notice: 'Contestnotification was successfully created.' }
    # format.json { render json: @contestnotification, status: :created, location: @contestnotification }
    # else
    # format.html { render action: "new" }
    # format.json { render json: @contestnotification.errors, status: :unprocessable_entity }
    # end
    # end
    @contestnotification = Contestnotification.new(:contest => @contest, :author => User.current)
    @contestnotification.safe_attributes = params[:contestnotification]
    @contestnotification.save_attachments(params[:attachments])
    if @contestnotification.save
      render_attachment_warning_if_needed(@contestnotification)
      flash[:notice] = l(:notice_successful_create)
      redirect_to contest_contestnotifications_url(@contest)
    else
      layout_file = 'base_newcontest'
      render :action => 'new', :layout => layout_file
    end
  end

  # PUT /contestnotifications/1
  # PUT /contestnotifications/1.json
  def update
    # @contestnotification = Contestnotification.find(params[:id])
    #
    # respond_to do |format|
    # if @contestnotification.update_attributes(params[:contestnotification])
    # format.html { redirect_to @contestnotification, notice: 'Contestnotification was successfully updated.' }
    # format.json { head :no_content }
    # else
    # format.html { render action: "edit" }
    # format.json { render json: @contestnotification.errors, status: :unprocessable_entity }
    # end
    # end
    @contestnotification = Contestnotification.find(params[:id])
    @contestnotification.safe_attributes = params[:contestnotification]
    @contestnotification.save_attachments(params[:attachments])
    if @contestnotification.save
      render_attachment_warning_if_needed(@contestnotification)
      flash[:notice] = l(:notice_successful_update)
      redirect_to contest_contestnotification_url(@contestnotification.contest, @contestnotification)
    else
      render :action => 'edit'
    end
  end

  # DELETE /contestnotifications/1
  # DELETE /contestnotifications/1.json
  def destroy
    # @contestnotification = Contestnotification.find(params[:id])
    # @contestnotification.destroy
    #
    # respond_to do |format|
    # format.html { redirect_to contestnotifications_url }
    # format.json { head :no_content }
    # end
    @contestnotification = Contestnotification.find(params[:id])
    @contestnotification.destroy
    redirect_to contest_contestnotifications_url(@contest)
  end

  private

  def find_optional_contest
    return true unless params[:id]
    @contest = Contest.find(params[:id])
      # authorize
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def access_edit_destroy
    if (User.current.admin? && User.current.logged? )||(User.current == @contest.author && User.current.logged?)
      return true
    else
      render_403
    end
  end

end
