import os
from github.env import get_required_env_var
from actions_logging.app_logging import logger

def create_maven_settings(maven_local_repository: str = "") -> str:
    nexus_user = get_required_env_var('NEXUS_USER')
    nexus_password = get_required_env_var('GLOBAL_CICD_NEXUS_PASSWORD')
    if not maven_local_repository:
        maven_local_repository = os.path.expanduser("~/.m2")
    maven_local_repository_absolute_path = os.path.abspath(maven_local_repository)
    os.makedirs(maven_local_repository_absolute_path, exist_ok=True)
    maven_settings = f"""<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
        <localRepository/>
        <interactiveMode/>
        <offline/>
        <pluginGroups/>
        <servers>
            <server>
                <id>nexus-snapshots</id>
                <username>{nexus_user}</username>
                <password>{nexus_password}</password>
            </server>
            <server>
                <id>nexus-releases</id>
                <username>{nexus_user}</username>
                <password>{nexus_password}</password>
            </server>
        </servers>
        <mirrors>
            <mirror>
                <id>nexus-releases</id>
                <name>central</name>
                <url>https://nexus.perimeter81.com/repository/yarkon-group/</url>
                <mirrorOf>*</mirrorOf>
            </mirror>
        </mirrors>
        <proxies/>
        <profiles>
            <profile>
                <repositories>
                    <repository>
                        <id>nexus-releases</id>
                        <name>Codehaus Snapshots</name>
                        <releases>
                            <enabled>false</enabled>
                            <updatePolicy>always</updatePolicy>
                            <checksumPolicy>warn</checksumPolicy>
                        </releases>
                        <snapshots>
                            <enabled>false</enabled>
                            <updatePolicy>never</updatePolicy>
                            <checksumPolicy>fail</checksumPolicy>
                        </snapshots>
                        <url>https://repo.maven.apache.org/maven2/</url>
                        <layout>default</layout>
                    </repository>
                </repositories>
            </profile>
            <profile>
                <id>allow-snapshots</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
                <repositories>
                    <repository>
                        <id>nexus-snapshots</id>
                        <url>https://nexus.perimeter81.com/repository/yarkon-group/</url>
                        <releases>
                            <enabled>false</enabled>
                        </releases>
                        <snapshots>
                            <enabled>true</enabled>
                        </snapshots>
                    </repository>
                </repositories>
            </profile>
        </profiles>
        <activeProfiles/>
    </settings>"""

    logger.info(f"creating maven settings.xml in {maven_local_repository_absolute_path}")
    with open(mvn_settings_absolute_path := os.path.join(maven_local_repository_absolute_path, "settings.xml"), "w") as f:
        f.write(maven_settings)

    os.chmod(mvn_settings_absolute_path, 0o644)
    return mvn_settings_absolute_path

if __name__ == "__main__":
    create_maven_settings()
