import { createSource, createSourceOptions, fetchChannel, pullImages } from "../lib.js"

let tumblr = {}

export const testWhitelist = (array, whitelist) =>
	whitelist.find(tag => !array.includes(tag)) !== undefined

export const testBlacklist = (array, blacklist) =>
	blacklist.find(tag => array.includes(tag)) !== undefined

tumblr.createSource = (user, options, postReducerCallback, cache) => {
    let lowercaseUser = user.toLowerCase()
    let source = {
        type: 'tumblr',
        description: `Aggregate feed for @${lowercaseUser} on tumblr.com`,
        hostname: lowercaseUser + '.tumblr.com',
        pathname: 'rss',
        name: `tumblr-${lowercaseUser}`,
        displayName: user,
        user: lowercaseUser,
        ...createSourceOptions(options)
    }

    return createSource(source, fetchChannel, postReducerCallback, cache)
}

tumblr.isRepost = (post) => {
    let reblog = post.description.querySelector('p > a.tumblr_blog')
    
    return reblog && reblog.innerHTML !== post.source.user
}

tumblr.matchesTags = (post, whitelist, blacklist) => {
    if(whitelist && testWhitelist(post.categories, whitelist)) {
        return false
    }

    if(blacklist && testBlacklist(post.categories, blacklist)) {
        return false
    }

    return true
}

tumblr.pullImages = pullImages

export default tumblr