module Accounts
  class TermsController < ApplicationController
    include SessionMethods

    layout "site"

    before_action :disable_terms_redirect
    before_action :authorize_web
    before_action :set_locale
    before_action :check_database_readable

    authorize_resource :class => :account_terms

    def show
      @legale = params[:legale] || OSM.ip_to_country(request.remote_ip) || Settings.default_legale
      @text = OSM.legal_text_for_country(@legale)

      if request.xhr?
        render :partial => "terms"
      else
        @title = t ".title"

        if current_user&.terms_agreed?
          # Already agreed to terms, so just show settings
          redirect_to edit_account_path
        elsif current_user.nil?
          redirect_to login_path(:referer => request.fullpath)
        end
      end
    end

    def update
      @title = t "users.new.title"

      if params[:decline] || !(params[:read_tou] && params[:read_ct])
        if current_user
          current_user.terms_seen = true

          flash[:notice] = { :partial => "accounts/terms/terms_declined_flash" } if current_user.save

          referer = safe_referer(params[:referer]) if params[:referer]

          redirect_to referer || edit_account_path
        elsif params[:decline]
          redirect_to t("users.terms.declined"), :allow_other_host => true
        else
          redirect_to account_terms_path
        end
      elsif current_user
        unless current_user.terms_agreed?
          current_user.consider_pd = params[:user][:consider_pd]
          current_user.tou_agreed = Time.now.utc
          current_user.terms_agreed = Time.now.utc
          current_user.terms_seen = true

          flash[:notice] = t "users.new.terms accepted" if current_user.save
        end

        referer = safe_referer(params[:referer]) if params[:referer]

        redirect_to referer || edit_account_path
      end
    end
  end
end
