# Support for shopping cart
class CartController < ShopController

  def cart
    add_breadcrumb 'Koszyk', '/cart/cart'
  end

  def add_to_cart
    @product = Product.where('slug = ? AND active = 1', params[:id]).first
    if @cart.blank?
      @cart = Cart.new(uuid: cookie_cart_number)
      @cart.save
    end
    if @product
      if @product.chk_quantity
        if @product.qty > 0 && @product.qty >= params[:qty].to_i
          # rezerwujemy ta ilosc produktow
          # i wrzucamy do koszyka
          add_product_to_cart(@cart, @product, params[:qty].to_i)
          @message = ['success', 'Dodano do koszyka']
        elsif @product.qty > 0 && @product.qty < params[:qty].to_i
          # zamawiona ilosc jest mniejsza od dostepnej ilosci
          # obnizamy ilosc produktow dla klienta i rezerwujemy ta ilosc
          add_product_to_cart(@cart, @product, @product.qty)
          # informujemy o zmniejszeniu ilosci produktow w koszyku
          @message = ['info', "Dodano do koszyka tylko #{@product.qty} szt."]
        else
          # za malo produktow
          # informujemy o tym fakcie, ze produkt sie skonczyl
          @message = ['warn', "Produkt #{@product.name} został sprzedany"]
        end
      else
        # jesli nie sprawdzamy ilosci produktu
        # to wrzucamy zamowiona ilosc do koszyka
        add_product_to_cart(@cart, @product, params[:qty].to_i)
        @message = ['success', 'Dodano do koszyka']
      end
    else
      # brak takiego produktu
      @message = ['error', 'Brak takiego produktu']
    end
  end

  def remove_from_cart
    @product = Product.where('slug = ?', params[:id]).first
    return unless @cart && @product
    pr = @cart.cart_products.where(product_id: @product.id).first
    unless pr.blank?
      pr.destroy
    end
  end

  def change_qty
    id = params[:id].split('_')[2]
    @cart_product = CartProduct.where(id: id).first
    product = @cart_product.product
    if product.chk_quantity
      if product.qty > 0 && product.qty >= params[:qty].to_i
        # rezerwujemy ta ilosc produktow
        # i wrzucamy do koszyka
        add_product_to_cart(@cart, product, params[:qty].to_i)
        @message = ['success', 'Zmieniono zawartość koszyka']
      elsif product.qty > 0 && product.qty < params[:qty].to_i
        # zamawiona ilosc jest mniejsza od dostepnej ilosci
        # obnizamy ilosc produktow dla klienta i rezerwujemy ta ilosc
        add_product_to_cart(@cart, product, product.qty)
        # informujemy o zmniejszeniu ilosci produktow w koszyku
        @message = ['info', "Dodano do koszyka tylko #{product.qty} szt."]
      else
        # za malo produktow
        # informujemy o tym fakcie, ze produkt sie skonczyl
        # i usuwamy go z koszyka
        @message = ['warn', "Produkt #{product.name} został sprzedany"]
      end
    else
      # jesli nie sprawdzamy ilosci produktu
      # to wrzucamy zamowiona ilosc do koszyka
      add_product_to_cart(@cart, product, params[:qty].to_i)
      @message = ['success', 'Zmieniono zawartość koszyka']
    end
    @cart_product.reload
  end

  def clear
    @cart.cart_products.destroy_all
  end

  private

  def add_product_to_cart(cart, product, qty)
    cp = cart.cart_products.where(product_id: product.id).first
    cp = CartProduct.new(cart_id: cart.id, product_id: product.id) if cp.blank?
    cp.quantity = qty
    cp.price = product.price
    cp.save
  end
end
