#coding=utf-8
#
# 文档在 https://www.showdoc.cc/127895880302646?page_id=1077512172693249
#
class GitService

  class << self

    ['add_repository', 'fork_repository', 'delete_repository', 'file_tree', 'update_file', 'file_content', 'commits'].each do |method|
      define_method method do |params|
        post(method, params)
      end
    end

    private

    def root_url
      new_git_address = EduSetting.get('git_address_domain')
      raise 'error: new_git_address not configuration' unless new_git_address.present?
      new_git_address
    end

    def logger
      Rails.logger
    end

    def post(action, params)
      uri = URI.parse("#{root_url}/api/#{action}")
      https = Net::HTTP.new(uri.host, uri.port)
      https.use_ssl = root_url.start_with?('https')
      req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' => 'text/plain;charset=utf-8'})
      req.body = params.to_json
      res = https.request(req)
      body = res.body
      logger.info("--uri_exec: .....res is #{body}")

      content = JSON.parse(body)
      if content["code"] != 0
        raise("版本库异常")
        logger.error("repository error: #{content['msg']}")
      end
      #raise content["msg"] if content["code"] != 0

      content["data"]
    end
  end

end