using Docile, Lexicon, JuliaFEM

const api_directory = "api"

"""
Searches recursively all the modules from packages. As documentation grows, it's a bit
troublesome to add all the new modules manually, so this function searches all the modules
automatically. 

Parameters
----------
    module_: Module
        Module where we want to search modules inside
    append_list: Array{Module, 1}
        Array, where we append Modules as we find them

Returns
-------
    None. Void function, which manipulates the append_list 
"""
function search_modules!(module_::Module, append_list::Array{Module, 1})
    all_names = names(module_, true)
    for each in all_names
        inner_module = module_.(each)
        if (typeof(inner_module) == Module) && !(inner_module in append_list)
            push!(append_list, inner_module)
            search_modules!(inner_module, append_list)
        end
    end
end

append_list = Array(Module, 0)
search_modules!(JuliaFEM, append_list)

const modules = append_list

# main_folder = dirname(dirname(@__FILE__))
# this_folder = dirname(@__FILE__)

# file_ = "README.md"
# run(`cp $main_folder/$file_ $this_folder`)

cd(dirname(@__FILE__)) do
    # Run the doctests *before* we start to generate *any* documentation.
#    for m in modules
#        failures = failed(doctest(m))
#        if !isempty(failures.results)
#            println("\nDoctests failed, aborting commit.\n")
#            display(failures)
#            exit(1) # Bail when doctests fail.
#        end
#    end
    # Generate and save the contents of docstrings as markdown files.
    index  = Index()
    for mod in modules
        Lexicon.update!(index, save(joinpath(api_directory, "$(mod).rst"), mod))
    end
    save(joinpath(api_directory, "index.rst"), index)

    # Add a reminder not to edit the generated files.
  #  open(joinpath(api_directory, "README.md"), "w") do f
  #      print(f, """
  #      Files in this directory are generated using the `build.jl` script. Make
  #      all changes to the originating docstrings/files rather than these ones.
  #      """)
  #  end
    # save(joinpath(api_directory, "index.rst"), index; md_subheader = :category)
    # info("Adding all documentation changes in $(api_directory) to this commit.")
    # success(`git add $(api_directory)`) || exit(1)

end
