class ApplicationController < ActionController::Base
	# Prevent CSRF attacks by raising an exception.
	# For APIs, you may want to use :null_session instead.
	before_action :provide_default_collections
	before_action :prepare_meta_tags, if: "request.get?"

	protect_from_forgery with: :exception

	private

	def provide_default_collections
		@feed_back = FeedBack.new
		@config = Hash[ Config.all.map{|config| [config.key, config.value]} ]
		@services = Service.all.order(:order)
	end

	def prepare_meta_tags(options={})
		site_name   = @config[ 'site_title' ]
		title       = options[:title].blank? ? '' : options[:title]
		description = options[:description].blank? ? @config[ 'site_description' ] : options[:description]
		keywords    = options[:keywords].blank? ? @config[ 'site_keywords' ] : options[:keywords]
		image       = options[:image] || ActionController::Base.helpers.asset_path("tanol_big_logo.png")
		current_url = request.url

		# Let's prepare a nice set of defaults
		defaults = {
			site:        site_name,
			title:       title,
			image:       image,
			description: description,
			keywords: keywords,#   %w[шторы заказ Санкт-Петербург дизайн пошив карнизы СПб],
			reverse: true,
			separator: '-',
			twitter: {
				site_name: site_name,
				site: '@tanol',
				card: 'summary',
				description: description,
				image: image
			},
			og: {
				url: current_url,
				site_name: site_name,
				title: title,
				image: image,
				description: description,
				type: 'website'
			}
		}

		options.reverse_merge!(defaults)

		set_meta_tags options
	end



require 'open-uri'
require 'timeout'
require "mini_magick"




def download_file addr
  size_limit = 10000000
  dir = 'static_page_text'

  ext = File.extname( addr )[4]

  ext = '.jpg' if ext !='.jpg' && ext !='.png' && ext !='.gif'

  off_dir = Rails.public_path.join( dir )
  off_file = ""
  file_name = ""

  Dir.mkdir off_dir unless File.exist?( off_dir )

  loop do
    file_name = rand(36**8).to_s(36) + rand(36**8).to_s(36) + ext
    off_file = off_dir.join( file_name )
    break unless File.exist?( off_file )
  end

  # fixme! limit the size

  if size_limit == IO.copy_stream(open( addr ), off_file, size_limit)
    File.delete off_file
    raise RuntimeError, 'size_limit'
  end

  image = MiniMagick::Image.open( off_file )
  image.validate!

  return '/' + dir + '/' + file_name
end


def repace_external_image_src text
  timeout_in_seconds = 60

  doc = Nokogiri::HTML.fragment(text)
  imgs = doc.xpath('//img')

  imgs.each do |img|
    if !img['src'].blank? && ( img['src'].start_with?('http://') || img['src'].start_with?('https://') )
      begin
        Timeout::timeout(timeout_in_seconds) do
          img['data-src'] = img['src']
          img['src'] = download_file img['src']
        end
      rescue Exception => e
        #img['src'] = ''
        #p 'skip', e
      end
    end #if
  end #each

  return doc.to_html
end


end
