class SuppliersController < ApplicationController
  before_action :authenticate_suppliers, except: %i[index list]
  helper :deliveries

  def index
    @suppliers = Supplier.undeleted.order(:name)
    @deliveries = Delivery.recent
  end

  def show
    @supplier = Supplier.find(params[:id])
    @deliveries = @supplier.deliveries.recent
    @orders = @supplier.orders.recent
  end

  # new supplier
  # if shared_supplier_id is given, the new supplier will filled whith its attributes
  def new
    if params[:shared_supplier_id]
      shared_supplier = SharedSupplier.find(params[:shared_supplier_id])
      @supplier = shared_supplier.suppliers.new(shared_supplier.autofill_attributes)
    else
      @supplier = Supplier.new
    end
  end

  def edit
    @supplier = Supplier.find(params[:id])
  end

  def create
    @supplier = Supplier.new(supplier_params)
    @supplier.supplier_category ||= SupplierCategory.first
    if @supplier.save
      flash[:notice] = I18n.t('suppliers.create.notice')
      redirect_to suppliers_path
    else
      render action: 'new'
    end
  end

  def update
    @supplier = Supplier.find(params[:id])
    if @supplier.update(supplier_params)
      flash[:notice] = I18n.t('suppliers.update.notice')
      redirect_to @supplier
    else
      render action: 'edit'
    end
  end

  def destroy
    @supplier = Supplier.find(params[:id])
    @supplier.mark_as_deleted
    flash[:notice] = I18n.t('suppliers.destroy.notice')
    redirect_to suppliers_path
  rescue StandardError => e
    flash[:error] = I18n.t('errors.general_msg', msg: e.message)
    redirect_to @supplier
  end

  # gives a list with all available shared_suppliers
  def shared_suppliers
    @shared_suppliers = SharedSupplier.all
  end

  private

  def supplier_params
    params
      .require(:supplier)
      .permit(:name, :address, :phone, :phone2, :fax, :email, :url, :contact_person, :customer_number,
              :iban, :custom_fields, :delivery_days, :order_howto, :note, :supplier_category_id,
              :shared_supplier_id, :min_order_quantity, :shared_sync_method)
  end
end