/*
 * Copyright 2004-present the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package io.spring.gradle.convention;

import org.gradle.api.Plugin
import org.gradle.api.Project

class RepositoryConventionPlugin implements Plugin<Project> {

	@Override
	void apply(Project project) {
		String[] forceMavenRepositories = ((String) project.findProperty("forceMavenRepositories"))?.split(',')
		boolean isImplicitSnapshotRepository = forceMavenRepositories == null && Utils.isSnapshot(project)
		boolean isImplicitMilestoneRepository = forceMavenRepositories == null && Utils.isMilestone(project)

		boolean isSnapshot = isImplicitSnapshotRepository || forceMavenRepositories?.contains('snapshot')
		boolean isMilestone = isImplicitMilestoneRepository || forceMavenRepositories?.contains('milestone')

		project.repositories {
			if (forceMavenRepositories?.contains('local')) {
				mavenLocal()
			}
			maven {
				name = 'shibboleth'
				url = 'https://build.shibboleth.net/nexus/content/repositories/releases/'
				content {
					includeGroupByRegex('org\\.opensaml.*')
					includeGroupByRegex('net\\.shibboleth.*')
				}
			}
			mavenCentral()
			if (isSnapshot) {
				maven {
					name = 'artifactory-snapshot'
					if (project.hasProperty('artifactoryUsername')) {
						credentials {
							username project.artifactoryUsername
							password project.artifactoryPassword
						}
					}
					url = 'https://repo.spring.io/snapshot/'
				}
			}
			if (isSnapshot || isMilestone) {
				maven {
					name = 'artifactory-milestone'
					if (project.hasProperty('artifactoryUsername')) {
						credentials {
							username project.artifactoryUsername
							password project.artifactoryPassword
						}
					}
					url = 'https://repo.spring.io/milestone/'
				}
			}
			maven {
				name = 'artifactory-release'
				if (project.hasProperty('artifactoryUsername')) {
					credentials {
						username project.artifactoryUsername
						password project.artifactoryPassword
					}
				}
				content {
					excludeGroup('net.minidev')
				}
				url = 'https://repo.spring.io/release/'
			}
			forceMavenRepositories.findAll { it.startsWith('https://') || it.startsWith('file://') }.each { mavenUrl ->
				maven {
					url mavenUrl
				}
			}
		}
	}

}
