require(["dojo/Deferred",
    "dojo/dom",
    "dojo/on",
    "ecm/widget/dialog/AddContentItemDialog",
    "dojo/domReady!"
], function(Deferred, dom, on, AddContentItemDialog) {



    var getEntryTemplate = function(repository, entryTemplateId) {

        var deferred = new Deferred();

        repository.retrieveItem(null, function(item) {

                //var entryTemplate = repository.getEntryTemplateById(item.id,item.name, item.objectStore);
                var entryTemplateItem = {};
                entryTemplateItem.entryTemplate = item;
                entryTemplateItem.repository = repository;

                deferred.resolve(entryTemplateItem);
            },
            "EntryTemplate",
            "current",
            entryTemplateId);

        return deferred.promise;
    };




    var getCaseFolder = function(payload) {

        var deferred = new Deferred();
        var caseEditable = payload.caseEditable;
        console.log("caseEditable");
        console.log(caseEditable);
        caseEditable.getCase().retrieveCaseFolder(function(parentCaseFolder) {

            deferred.resolve(parentCaseFolder);

        });

        return deferred.promise;

    };


    var getSubFolder = function(parentCaseFolder, subFolderPath) {

        var deferred = new Deferred();
        console.log("parentCaseFolder");
        console.log(parentCaseFolder);
        var rootPath = parentCaseFolder.attributes.PathName;
        var fullPath = rootPath + "/" + subFolderPath;
        parentCaseFolder.repository.retrieveItem(fullPath, function(subfolder) {
            console.log("Subfolder");
            console.log(subfolder);
            deferred.resolve(subfolder);

        }, null, null, null, null, null);

        return deferred;
    };



    var executeFn = function(payload) {

        //vs-id of the entry template
        var entryTemplateId = "{84F966D4-A6E5-C65A-8A97-67140EB00000}";
        //the sub folder path like "Sub1/Sub2/Sub3"
        var subFolderPath = "F1";
        var getCaseFolderPromise = getCaseFolder(payload);

        getCaseFolderPromise.then(function(parentCaseFolder) {
            return getSubFolder(parentCaseFolder, subFolderPath);
        }).then(function(subfolder) {

            console.log("Promise Sub Folder");
            console.log(subfolder);
            console.log("Promise Repo ID");
            console.log(subfolder.repository.repositoryId);
            var repository = ecm.model.desktop.getRepository(subfolder.repository.repositoryId);
            console.log("Promise repository");
            console.log(repository);

            var getEntryTemplatePromise = getEntryTemplate(repository, entryTemplateId);

            getEntryTemplatePromise.then(function(entryTemplateItem) {

                console.log("entryTemplateItem");
                console.log(entryTemplateItem);
                var entryTemplate = entryTemplateItem.entryTemplate;
                var repository = entryTemplateItem.repository;

                var addContentItemDialog = new AddContentItemDialog();

                addContentItemDialog.showUsingTemplateItem(repository, subfolder, true, false, function(addedItem) {
                    console.log("addedItem");
                    console.log(addedItem);
                    subfolder.addToFolder(addedItem, function() {
                        console.log('Document added to sub folder ');

                    });
                }, null, entryTemplate);



            });




        });

    };


    executeFn(payload);


});