class Wco::ProductsController

def create

def create
  @product = Wco::Product.new params[:product].permit( :name )
  authorize! :create, @product
  stripe_product = Stripe::Product.create({ name: @product.name })
  # puts! stripe_product, 'stripe_product'
  flash_notice 'Created stripe product.'
  @product.product_id = stripe_product[:id]
  if @product.save
    flash_notice 'Created wco product.'
  else
    flash_alert "Cannot create wco product: #{@product.errors.full_messages.join(', ')}."
  end
  redirect_to action: :index
end

def destroy

def destroy
  @product = Wco::Product.find params[:id]
  authorize! :destroy, @product
  # flag = Stripe::Product.delete( @product.product_id ) if @product.product_id.present?
  # flash_notice "Delete stripe product: #{flag}"
  if @product.destroy
    flash_notice 'Deleted Wco::Product'
  else
    flash_alert "Cannot destroy product: #{@product.errors.fill_messages.join(', ')}."
  end
  redirect_to action: :index
end

def edit

def edit
  @product = Wco::Product.find params[:id]
  authorize! :edit, @product
end

def index

def index
  authorize! :index, Wco::Product
  @stripe_products  = {}
  @_stripe_products = Stripe::Product.list().data
  @_stripe_prices   = Stripe::Price.list().data
  @_stripe_products.each do |sp|
    @stripe_products[sp[:id]] = sp
    @stripe_products[sp[:id]][:prices] ||= {}
  end
  @_stripe_prices.each do |price|
    begin
      @stripe_products[price[:product]][:prices][price[:id]] = price
    rescue Exception
      nil
    end
  end
  @wco_products = Wco::Product.all.includes( :prices )
  @wco_products.each do |item|
    if @stripe_products[item[:product_id]]
      @stripe_products[item[:product_id]][:wco_product] = item
    end
  end
  ## 2023-09-07 @TODO: move to model:
  ##   @wco_prices_hash = Wco::Price.all.hash_by( :price_id )
  ##
  @wco_prices_hash = {}
  @wco_prices = Wco::Price.all
  @wco_prices.each do |item|
    @wco_prices_hash[item[:price_id]] = item
  end
end

def new

def new
  @product = Wco::Product.new
  authorize! :new, @product
end

def show

def show
  authorize! :show, @product
  @product = Wco::Product.find params[:id]
  respond_to do |format|
    format.html
    format.json { render 'show.jbuilder', layout: false }
  end
end

def update

def update
  authorize! :edit, @product
  @product = Wco::Product.find params[:id]
  if @product.update_attributes params[:product].permit!
    flash[:notice] = 'Success.'
    redirect_to action: :show, id: @product.id
  else
    flash[:alert] = "No luck: #{@product.errors.full_messages.join(', ')}."
    render action: :edit
  end
end