/**
 * \file
 * \author Karsten Rink
 * \date   2010-10-26
 * \brief  Definition of the FileFinder class.
 *
 * \copyright
 * Copyright (c) 2012-2018, OpenGeoSys Community (http://www.opengeosys.org)
 *            Distributed under a Modified BSD License.
 *              See accompanying file LICENSE.txt or
 *              http://www.opengeosys.org/project/license
 *
 */

#include "FileFinder.h"

#include <fstream>

#include <logog/include/logog.hpp>


namespace BaseLib
{

FileFinder::FileFinder()
{
    addDirectory(".");
}

FileFinder::FileFinder(std::initializer_list<std::string> dirs)
{
    addDirectory(".");
    for (auto const& dir : dirs)
        addDirectory(dir);
}

void FileFinder::addDirectory(std::string const& dir)
{
    if (dir.empty())
        return;

    if (dir[dir.size() - 1] != '/')
        _directories.emplace_back(dir + "/");
    else
        _directories.push_back(dir);
}

std::string FileFinder::getPath(std::string const& filename) const
{
    if (_directories.empty())
        ERR("FileFinder::getPath(): No directories set.");

    for (auto const& dir : _directories)
    {
        std::string testDir(dir);
        std::ifstream is(testDir.append(filename).c_str());
        if (is.good())
        {
            is.close();
            return testDir;
        }
    }
    ERR("FileFinder::getPath(): File not found.");
    return filename;
}

} // end namespace BaseLib