class PreviewController < ApplicationController
  def title
    # TODO: # 既知サイトなら決まったフォーマットで title 取得するやぅに．
    return head :unauthorized unless current_user

    url = params[:url]
    return render_bad_request('URL は必須です．') unless url.present?

    unless url.start_with?(/http(s)?:\/\//)
      url = 'http://' + url
    end

    html = URI.open(url, open_timeout: 5, read_timeout: 5).read
    doc = Nokogiri::HTML.parse(html)
    title = doc.at('title')&.text&.strip

    render json: { title: title }
  rescue => e
    render_bad_request(e.message)
  end

  def thumbnail
    # TODO: 既知ドメインであれば指定のアドレスからサムネールを取得するやぅにする．

    return head :unauthorized unless current_user

    url = params[:url]
    return render_bad_request('URL は必須です．') if url.blank?

    unless url.start_with?(/http(s)?:\/\//)
      url = 'http://' + url
    end

    path = Rails.root.join('tmp', "thumb_#{ SecureRandom.hex }.png")
    system("node #{ Rails.root }/lib/screenshot.js #{ Shellwords.escape(url) } #{ path }")

    if File.exist?(path)
      image = MiniMagick::Image.open(path)
      image.resize '180x180'
      File.delete(path) rescue nil
      send_file image.path, type: 'image/png', disposition: 'inline'
    else
      render json: { type: 'internal_server_error',
                     message: 'サムネールを生成できませんでした．',
                     errors: { },
                     base_errors: ['サムネールを生成できませんでした．'] },
             status: :internal_server_error
    end
  end
end
