# frozen_string_literal: true

class ActivitiesController < DataController
  def index
    @show_all = params[:all] == '1'

    where = {}
    where['active'] = true unless @show_all

    if params[:member_slug]
      @owner = Member.find_by(slug: params[:member_slug])
      where['owner_id'] = @owner.id unless @owner.nil?
    end

    @activities = Activity.search(
      where:,
      page:     params[:page],
      limit:    30,
      boost_by: [:created_at],
      load:     false
    )
    @filename = "Growstuff-#{specifics}Activities-#{Time.zone.now.to_fs(:number)}.csv"
    respond_with(@activities)
  end

  def show
    if @activity.finished? && @activity.owner == current_member && (@activity.updated_at + 2.weeks) > Time.now
      @repeat_link = new_activity_path(
        name:        @activity.name,
        garden_id:   @activity.garden_id,
        planting_id: @activity.planting_id,
        category:    @activity.category,
        description: @activity.description,
        due_date:    2.weeks.from_now.to_date
      )
    end

    respond_with @activity
  end

  def new
    @activity = Activity.new(
      owner:    current_member,
      due_date: Date.today
    )
    @activity.name = params[:name] if params[:name]
    @activity.description = params[:description] if params[:description]
    @activity.category = params[:category] if params[:category]
    @activity.due_date = params[:due_date] if params[:due_date]
    if params[:garden_id]
      @activity.garden = Garden.find_by(
        owner: current_member,
        id:    params[:garden_id]
      )
    end

    if params[:planting_id]
      @activity.planting = Planting.find_by(
        owner: current_member,
        id:    params[:planting_id]
      )
    end

    respond_with @activity
  end

  def edit
    # the following are needed to display the form but aren't used
    @gardens = @activity.owner.gardens.active.order_by_name
    @plantings = @activity.owner.plantings.active
  end

  def create
    @activity = Activity.new(activity_params)
    @activity.owner = current_member
    @activity.due_date ||= Date.today

    if @activity.save
      if params[:repeat_times].to_i > 0
        repeat_times = params[:repeat_times].to_i
        repeat_weeks = params[:repeat_weeks].to_i

        repeat_times.times do |i|
          new_activity = @activity.dup
          new_activity.due_date = @activity.due_date + (i + 1) * repeat_weeks.weeks
          new_activity.save
        end
      end
    end

    respond_with @activity
  end

  def update
    @activity.update(activity_params)
    respond_with @activity
  end

  def destroy
    @activity.destroy
    respond_with @activity, location: @activity.garden
  end

  private

  def activity_params
    params.require(:activity).permit(
      :name, :description, :category, :finished,
      :garden_id, :planting_id, :due_date,
      :repeat_times, :repeat_weeks
    )
  end

  def specifics
    return if @owner.blank?

    "#{@owner.to_param}-"
  end
end
