class Wco::Site

def self.kinds_list

def self.kinds_list
  [nil] + KINDS
end

def self.list

def self.list
  [[nil,nil]] + all.map { |s| [ s.origin, s.id ] }
end

def body

def body
  {
    "_links": {
      "type":{"href":"http://pi.local/rest/type/node/article"}
    },
    "title":[{"value":"Node +++ 123 bac +++" }],
    "body":[{"value": "<b>hello, wor</b>ld!", "format": "full_html" }],
    "type":[{"target_id":"article"}],
    "status": [{"value": 1}],
    "_embedded": {
      "http://pi.local/rest/relation/node/article/field_issue": [
        { "uuid": [{ "value": "56229a95-d675-43e1-99b1-f9e11b5579c5" }] }
      ],
      "http://pi.local/rest/relation/node/article/field_tags": [
        { "uuid": [{ "value": "45646a7d-1a16-42e8-b758-f6e1c8d976f7" }] },
        { "uuid": [{ "value": "834e34e2-05ae-498d-b876-453798872ce1" }] }
      ]
    }
  }
end

def check_sitemap

def check_sitemap
  @results = []
  @total_count = 0
  @error_count = 0
  sitemap_paths.each do |check|
    @total_count += 1
    puts "Checking #{check[:path]}:"
    if check[:selector].present?
      begin
        body = HTTParty.get( "#{origin}#{check[:path]}" ).body
      rescue OpenSSL::SSL::SSLError => err
        @results.push "NOT OK [ssl-exception] #{check[:path]}".red
        logg "NOT OK [ssl-exception] #{check[:path]}"
        check.update status: 'NOT OK'
        next
      end
      doc = Nokogiri::HTML( body )
      out = doc.search check[:selector]
      if out.present?
        @results.push "OK #{check[:path]}"
        logg "OK #{check[:path]}"
        check.update status: 'OK'
      else
        @results.push "NOT OK [selector-missing] #{check[:path]}".red
        logg "NOT OK [selector-missing] #{check[:path]}"
        check.update status: 'NOT OK'
        @error_count += 1
      end
      if check[:meta_description]
        out = doc.search( 'head meta[name="description"]' )[0]['content']
        if check[:meta_description] == out
          @results.push "OK #{check[:path]} meta_description"
          logg "OK #{check[:path]} meta_description"
          check.update status: 'OK'
        else
          @results.push "NOT OK [meta-description-missing] #{check[:path]}".red
          logg "NOT OK [meta-description-missing] #{check[:path]}"
          check.update status: 'NOT OK'
          @error_count += 1
        end
      end
    elsif check[:redirect_to].present?
      out = HTTParty.get( "#{origin}#{check[:path]}", follow_redirects: false )
      if( out.headers[:location] == check[:redirect_to] ||
          out.headers[:location] == "#{origin}#{check[:redirect_to]}" )
        @results.push "OK #{check[:path]}"
        logg "OK #{check[:path]}"
        check.update status: 'OK'
      else
        @results.push "NOT OK [redirect-missing] #{check[:path]}".red
        logg "NOT OK [redirect-missing] #{check[:path]}"
        check.update status: 'NOT OK'
        puts!( out.response, 'response' ) if DEBUG
        # puts!( out.body, 'body' ) if DEBUG
        @error_count += 1
        puts "NOT OK #{check[:path]}".red
        puts out.headers[:location]
        puts check[:redirect_to]
      end
    else
      @results.push "SKIP #{check[:path]}"
      logg "SKIP #{check[:path]}"
      check.update status: 'SKIP'
    end
    if check[:selectors]&[0]
      check[:selectors].each do |selector|
        body = HTTParty.get( "#{origin}#{check[:path]}" ).body
        doc = Nokogiri::HTML( body )
        out = doc.search selector
        if out.present?
          @results.push "OK #{check[:path]} selectors:#{selector}"
          logg "OK #{check[:path]} selectors:#{selector}"
          check.update status: 'OK'
        else
          @results.push "NOT OK [selectors-missing:#{selector}] #{check[:path]}".red
          logg "NOT OK [selectors-missing:#{selector}] #{check[:path]}"
          check.update status: 'NOT OK'
          @error_count += 1
        end
      end
    end
  end
  puts "Results:".green
  @results.each do |r|
    puts r
  end
  puts "Total count: #{@total_count}"
  puts "Error count: #{@error_count}"
  return { total_count: @total_count, error_count: @error_count, results: @results }
end

def do_post

def do_post
  HTTParty.post( post_url,
    body: JSON.generate( body ),
    headers: { 'Content-Type' => 'application/hal+json' },
    basic_auth: { username: username, password: password },
  )
end

def logg msg

def logg msg
  Wco::Log.create!({
    message: msg,
    obj: self,
  })
end

def to_s

def to_s
  slug
  # origin
end

def wp_import

def wp_import
  site = self
  root_tag = Wco::Tag.find_or_create_by slug: "#{site.slug}_wp-import", site_id: site.id
  url      = "#{site.origin}/wp-json/wp/v2/posts"
  pi_admin = Wco::Profile.find_or_create_by email: 'admin@piousbox.com'
  n_pages  = 12
  per_page = 100
  (1..n_pages).each do |page|
    print "Page #{page}"
    posts = HTTParty.get url, query: { per_page: per_page, page: page }
    posts.each do |post|
      report = Wco::Report.new({
        legacy_id: post['id'],
        created_at: post['date'],
        slug: post['link'].sub(site.origin, ''),
        title: post['title']['rendered'],
        subtitle: post['excerpt']['rendered'],
        body: post['content']['rendered'],
        author: pi_admin,
        tag_ids: ( [ root_tag ] + site.tags.where( :legacy_id.in => post['categories'] ) ).map(&:id),
      })
      if report.save
        print '^'
      else
        puts report.errors.messages
      end
    end
  end
  puts "ok"
end