# frozen_string_literal: true

require "cgi"

class Ajax::AnswerController < AjaxController
  include SocialHelper::TwitterMethods
  include SocialHelper::TumblrMethods

  def create
    params.require :id
    params.require :answer
    params.require :inbox

    inbox = (params[:inbox] == "true")

    if inbox
      inbox_entry = Inbox.find(params[:id])

      unless current_user == inbox_entry.user
        @response[:status] = :fail
        @response[:message] = t(".error")
        return
      end
    else
      question = Question.find(params[:id])

      unless question.user.privacy_allow_stranger_answers
        @response[:status] = :privacy_stronk
        @response[:message] = t(".privacy")
        return
      end
    end

    answer = if inbox
               inbox_entry.answer params[:answer], current_user
             else
               current_user.answer question, params[:answer]
             end

    @response[:status] = :okay
    @response[:message] = t(".success")
    @response[:success] = true

    if current_user.sharing_enabled
      @response[:sharing] = {
        twitter: twitter_share_url(answer),
        tumblr:  tumblr_share_url(answer),
        custom:  CGI.escape(prepare_tweet(answer))
      }
    end

    return if inbox

    # this assign is needed because shared/_answerbox relies on it, I think
    @question = 1
    @response[:render] = render_to_string(partial: "answerbox", locals: { a: answer, show_question: false })
  end

  def destroy
    params.require :answer

    answer = Answer.find(params[:answer])

    unless (current_user == answer.user) || (privileged? answer.user)
      @response[:status] = :nopriv
      @response[:message] = t(".nopriv")
      return
    end

    Inbox.create!(user: answer.user, question: answer.question, new: true, returning: true) if answer.user == current_user
    answer.destroy

    @response[:status] = :okay
    @response[:message] = t(".success")
    @response[:success] = true
  end
end