app/controllers/wco/leads_controller.rb



class Wco::LeadsController < Wco::ApplicationController
  before_action :set_lists

  def create
    params[:lead][:tag_ids]&.delete ''
    params[:lead].delete :leadset_id if params[:lead][:leadset_id].blank?

    @lead = Wco::Lead.new params[:lead].permit!
    authorize! :create, @lead

    if params[:lead][:photo]
      photo = Wco::Photo.new photo: params[:lead][:photo]
      photo.is_public = true
      if photo.save
        @lead.photo = photo
      end
      params[:lead].delete :photo
    end

    if @lead.save
      flash_notice 'ok'
    else
      flash_alert @lead
    end
    redirect_to action: :index
  end

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

  def index
    authorize! :index, Wco::Lead
    @leads = Wco::Lead.all

    if params[:q].present?
      q = params[:q].downcase
      @leads = @leads.any_of(
        { email: /#{q}/i },
        { name:  /#{q}/i },
      );

      if 1 == @leads.length
        redirect_to controller: 'wco/leads', action: 'show', id: @leads[0].id
        return
      end
    end

    @leads = @leads.page( params[:leads_page ] ).per( current_profile.per_page )
  end

  def new
    authorize! :new, Wco::Lead
    @lead = Wco::Lead.new
  end

  def show
    @lead      = Wco::Lead.where({ id: params[:id] }).first
    @lead    ||= Wco::Lead.where({ email: params[:id] }).first
    authorize! :show, @lead
    if !@lead
      flash_alert "This lead does not exist"
      redirect_to request.referrer
      return
    end
    @ctxs  = @lead.ctxs.page(          params[:ctxs_page]  ).per( current_profile.per_page )
    @convs = @lead.conversations.page( params[:convs_page] ).per( current_profile.per_page )

  end

  def update
    params[:lead][:tag_ids]&.delete ''
    params[:lead].delete :leadset_id if params[:lead][:leadset_id].blank?

    @lead = Wco::Lead.find params[:id]
    authorize! :update, @lead

    if params[:lead][:photo]
      photo = Wco::Photo.new photo: params[:lead][:photo]
      photo.is_public = true
      if photo.save
        @lead.photo = photo
      end
      params[:lead].delete :photo
    end

    if @lead.update params[:lead].permit!
      flash_notice 'ok'
    else
      puts! @lead.errors.full_messages.join(", "), 'cannot update lead'
      flash_alert @lead
    end
    redirect_to action: :show, id: @lead.id
  end

  ##
  ## private
  ##
  private

  def set_lists
    @email_campaigns_list = [[nil,nil]] + WcoEmail::Campaign.all.map { |c| [ c.slug, c.id ] }
    @email_templates_list = WcoEmail::EmailTemplate.list
    @leads_list           = Wco::Lead.list
    @leadsets_list        = Wco::Leadset.list
    @tags_list            = Wco::Tag.list
  end


end