#pragma once

#include "AppConfig.h"
#include "DeckLinkDisplayMode.h"

#include <filesystem>
#include <string>

namespace RenderCadenceCompositor
{
class AppConfigProvider
{
public:
	AppConfigProvider();

bool Load(const std::filesystem::path& path, std::string& error);
bool LoadDefault(std::string& error);
	void ApplyCommandLine(int argc, char** argv);

	const AppConfig& Config() const { return mConfig; }
	const std::filesystem::path& SourcePath() const { return mSourcePath; }
	bool LoadedFromFile() const { return mLoadedFromFile; }

private:
	AppConfig mConfig;
	std::filesystem::path mSourcePath;
	bool mLoadedFromFile = false;
};

double FrameDurationMillisecondsFromRateString(const std::string& rateText, double fallbackRate = 59.94);
double FrameDurationMillisecondsFromDisplayMode(BMDDisplayMode displayMode, double fallbackMilliseconds);
void VideoFormatDimensions(const std::string& formatName, unsigned& width, unsigned& height);
std::filesystem::path FindConfigFile(const std::filesystem::path& relativePath = "config/runtime-host.json");
std::filesystem::path FindRepoPath(const std::filesystem::path& relativePath);
}
