module Suppliers
  class TablesController < Suppliers::ApplicationController
    # GET /tables
    # GET /tables.json
    def index
      @tables = Table.for_supplier(current_supplier, page: params[:page], per_page: params[:per_page] || 25, from_number: params[:from_number], to_number: params[:to_number])
      @tables.include_relation(:section)

      respond_to do |format|
        format.html # index.html.erb
        format.json { render json: @tables }
      end
    end

    # GET /tables/1
    # GET /tables/1.json
    def show
      @table= Table.find_by_supplier_id_and_id!(current_supplier.id, params[:id])

      respond_to do |format|
        format.html # show.html.erb
        format.json { render json: @table }
      end
    end

    # GET /tables/new
    # GET /tables/new.json
    def new
      @table = Table.new
      @table.section_id = params[:section_id].presence

      respond_to do |format|
        format.html # new.html.erb
        format.json { render json: @table }
      end
    end

    # GET /tables/1/edit
    def edit
      @table = Table.find(params[:id])
    end

    # POST /tables
    # POST /tables.json
    def create
      @table = Table.new(table_params)
      @table.supplier = current_supplier

      respond_to do |format|
        if @table.save
          format.html { redirect_to [:suppliers, @table.section || @table], notice: t('action.create.successfull', model: Table.model_name.human) }
          format.json { render json: @table, status: :created, location: @table }
        else
          format.html { render action: "new" }
          format.json { render json: @table.errors, status: :unprocessable_entity }
        end
      end
    end

    # PUT /supplier/tables/1
    # PUT /supplier/tables/1.json
    def update
      @table= Table.find_by_supplier_id_and_id!(current_supplier.id, params[:id])

      respond_to do |format|
        if @table.update_attributes(table_params)
          format.html { redirect_to [:suppliers, @table.section || @table], notice: t('action.update.successfull', model: Table.model_name.human) }
          format.json { head :no_content }
          format.js { head :no_content }
        else
          format.html { render action: "edit" }
          format.json { render json: @table.errors, status: :unprocessable_entity }
          format.js { head :no_content }
        end
      end
    end

    # DELETE /tables/1
    # DELETE /tables/1.json
    def destroy
      @table= Table.find_by_supplier_id_and_id!(current_supplier.id, params[:id])
      @table.destroy

      respond_to do |format|
        format.html { redirect_to suppliers_tables_url, notice: t('action.destroy.successfull', model: Table.model_name.human) }
        format.json { head :no_content }
      end
    end

    def qr_codes
      @tables = Table.for_supplier(current_supplier, from_number: params[:from_number], to_number: params[:to_number])
      @tables.select!{|t| t.section_id == params[:section_id]} if params[:section_id].present?
      render layout: 'qr_sheet'
    end

    private

    def table_params
      permitted_attributes = [:number, :section_id, :position_x, :position_y]
      # do not raise in development and test for json communication
      if request.format.json?
        params.require(:table).slice(*permitted_attributes).permit!
      else
        params.require(:table).permit permitted_attributes
      end
    end
  end
end
