#!/usr/bin/env python3
from conan import ConanFile
from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout
from conan.tools.files import copy, get, replace_in_file

import re
import os

def cmake_version(source_dir=os.path.dirname(__file__)):
    f = open(os.path.join(source_dir, "CMakeLists.txt"), 'r', encoding="utf-8")
    content = f.read()
    version = re.search(r"^\s+VERSION ([\d.]+)$", content, re.MULTILINE).group(1)
    return version.strip()


class DotcircleCmakeModulesConan(ConanFile):
    name = "dcm"
    license = "MIT"
    url = "https://git.dotcircle.dev/dotcircle/cmake-modules"
    homepage = "https://git.dotcircle.dev/dotcircle/cmake-modules"
    topics = ("conan", "cmake", "toolchain", "build-settings")
    description = "dotcircle CMake modules"
    settings = "build_type"

    def set_version(self):
        self.version = cmake_version(self.recipe_folder)

    def layout(self):
        cmake_layout(self)

    def export(self):
        copy(self, "LICENSE", src=self.recipe_folder, dst=self.export_folder)

    def export_sources(self):
        copy(self, "CMakeLists.txt", src=self.recipe_folder, dst=self.export_sources_folder)
        replace_in_file(self, os.path.join(self.export_sources_folder, "CMakeLists.txt"),
                        "add_subdirectory(docs)", "")

        copy(self, "modules/*", src=self.recipe_folder, dst=self.export_sources_folder)
        copy(self, "toolchain/*", src=self.recipe_folder, dst=self.export_sources_folder)
        copy(self, "find-modules/*", src=self.recipe_folder, dst=self.export_sources_folder)
        copy(self, "dcmConfig.cmake.in", src=self.recipe_folder, dst=self.export_sources_folder)

    def generate(self):
        tc = CMakeToolchain(self)
        tc.variables["SHARE_INSTALL_DIR"] = os.path.join(self.package_folder, "res")
        tc.generate()

        deps = CMakeDeps(self)
        deps.generate()


    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()

    def package(self):
        cmake = CMake(self)
        cmake.install()

    def package_info(self):
        self.cpp_info.set_property("pkg_config_name", "dcm")
        self.cpp_info.resdirs = ["res"]
        self.cpp_info.builddirs = [
            "res/dcm/cmake",
            "res/dcm/modules",
            "res/dcm/toolchain",
            "res/dcm/find-modules"
        ]

    def package_id(self):
        self.info.clear()


def main(argv=None):
    import argparse

    parser = argparse.ArgumentParser(
        usage=f'%(prog)s [options]',
        description='Get conan information',
    )

    parser.add_argument('-v', '--version', action='store_true',
                        help='Get the current package version',
                        )

    args = parser.parse_args(argv)
    if args.version:
        print(cmake_version())

    else:
        parser.print_help()
        return 1

    return 0


if __name__ == '__main__':
    exit(main())
