do

local api_key = cred_data.tumblr_api_key

local makeOurDate = function(dateString)
  local pattern = "(%d+)%-(%d+)%-(%d+)"
  local year, month, day = dateString:match(pattern)
  if month == "00" then
    return year
  elseif day == "00" then
    return month..'.'..year
  else
    return day..'.'..month..'.'..year
  end
end

local function get_tumblr_text(data)
  local title = data.posts[1].title
  local post = unescape(data.posts[1].body)
  return title, post
end

local function get_tumblr_photo(data)
  local caption = data.posts[1].summary
  local image_url = data.posts[1].photos[1].original_size.url
  return caption, image_url
end

local function get_tumblr_video(data)
  local caption = data.posts[1].caption
  local video_url = data.posts[1].permalink_url
  return caption, video_url
end

local function get_tumblr_info(blog, post, receiver)
  local url = 'https://api.tumblr.com/v2/blog/'..blog..'.tumblr.com/posts?id='..post..'&api_key='..api_key..'&filter=text'
  local res,code  = https.request(url)
  local data = json:decode(res).response
  if code ~= 200 then return "HTTP-Fehler" end
  if not data.posts then return "HTTP-Fehler" end
  
  -- General blog info, present on every type
  local blog_name = data.blog.title
  local created_at = makeOurDate(data.posts[1].date)
  local short_url = data.posts[1].short_url
  local typ = data.posts[1].type
  local text = blog_name..' am '..created_at..':\n'
  
  -- type-specific
  if typ == 'text' then
    local title, post = get_tumblr_text(data)
	text = text..title..'\n'..post..'\n'..short_url
  elseif typ == 'photo' then
    local caption, image_url = get_tumblr_photo(data)
	text = text..caption..'\n'..short_url
	local file = download_to_file(image_url)
	local cb_extra = {file_path=file}
	if string.ends(image_url, '.gif') then
      send_document(receiver, file, rmtmp_cb, cb_extra)
	else
      send_photo(receiver, file, rmtmp_cb, cb_extra)
	end
  elseif typ == 'video' then
    local caption, video_url = get_tumblr_video(data)
	text = text..caption..'\n'..video_url..'\n'..short_url
  else
    text = text..'Konnte Format nicht bestimmen (ist: '..typ..')'
  end
  
  return text
end

local function get_tumblr_blog(blog, receiver)
  local url = 'https://api.tumblr.com/v2/blog/'..blog..'.tumblr.com/info?api_key='..api_key
  local res,code = https.request(url)
  local data = json:decode(res).response.blog
  if code ~= 200 then return "HTTP-Fehler" end
  if not data then return "HTTP-Fehler" end
  
  local title = data.title
  if data.description == "" then
    description = ''
  else
    description = '\n'..data.description
  end

  if data.posts == 1 then
    posts = data.posts..' Post'
  else
    posts = data.posts..' Posts'
  end
  
  if data.likes then
    likes = ', '..data.likes..' Likes'
  else
    likes = ''
  end
  
  local text = title..description..'\n\n'..posts..likes..'\n'
  return text
end

local function run(msg, matches)
  local blog = matches[1]
  local post = matches[2]
  local receiver = get_receiver(msg)
  if not post then
    return get_tumblr_blog(blog, receiver)
  else
    return get_tumblr_info(blog, post, receiver)
  end
end

return {
  description = "Sendet Infos zu einem tumblr-Post oder -Blog", 
  usage = "Link zu tumblr-Post oder -Blog",
  patterns = {
    "^https?://(.*).tumblr.com/post/(%d+)",
    "^https?://(.*).tumblr.com/image/(%d+)",
	"^https?://(.*).tumblr.com/?$"
  },
  run = run 
}

end