define([
    "utils",
    "classes/Provider",
    "settings",
    "helpers/githubHelper"
], function(utils, Provider, settings, githubHelper) {

    var githubProvider = new Provider("github", "GitHub");
    githubProvider.publishPreferencesInputIds = [
        "github-reponame",
        "github-username",
        "github-branch"
    ];

    githubProvider.publish = function(publishAttributes, frontMatter, title, content, callback) {
        var commitMsg = settings.commitMsg;
        githubHelper.upload(publishAttributes.repository, publishAttributes.username, publishAttributes.branch, publishAttributes.path, content, commitMsg, callback);
    };

    githubProvider.newPublishAttributes = function(event) {
        var publishAttributes = {};
        publishAttributes.repository = utils.getInputTextValue("#input-publish-github-reponame", event);
        publishAttributes.username = utils.getInputTextValue("#input-publish-github-username");
        publishAttributes.branch = utils.getInputTextValue("#input-publish-github-branch", event);
        publishAttributes.path = utils.getInputTextValue("#input-publish-file-path", event);
        if(event.isPropagationStopped()) {
            return undefined;
        }
        return publishAttributes;
    };

    return githubProvider;
});