# frozen_string_literal: true

class RedactionsController < ApplicationController
  layout :site_layout

  before_action :authorize_web
  before_action :set_locale

  authorize_resource

  before_action :lookup_redaction, :only => [:show, :edit, :update, :destroy]
  before_action :check_database_readable
  before_action :check_database_writable, :only => [:create, :update, :destroy]

  def index
    @redactions = Redaction.order(:id)
  end

  def show; end

  def new
    @redaction = Redaction.new
  end

  def edit; end

  def create
    @redaction = Redaction.new
    @redaction.user = current_user
    @redaction.title = params[:redaction][:title]
    @redaction.description = params[:redaction][:description]
    # NOTE: the description format will default to 'markdown'

    if @redaction.save
      flash[:notice] = t(".flash")
      redirect_to @redaction
    else
      render :action => "new"
    end
  end

  def update
    # NOTE: don't update the user ID
    @redaction.title = params[:redaction][:title]
    @redaction.description = params[:redaction][:description]

    if @redaction.save
      flash[:notice] = t(".flash")
      redirect_to @redaction
    else
      render :action => "edit"
    end
  end

  def destroy
    if @redaction.old_nodes.empty? &&
       @redaction.old_ways.empty? &&
       @redaction.old_relations.empty?
      if @redaction.destroy
        flash[:notice] = t(".flash")
        redirect_to :redactions
      else
        flash[:error] = t(".error")
        redirect_to @redaction
      end
    else
      flash[:error] = t(".not_empty")
      redirect_to @redaction
    end
  end

  private

  def lookup_redaction
    @redaction = Redaction.find(params[:id])
  end
end
