import { ExecutorContext, joinPathFragments, logger } from '@nx/devkit'
import { buildTarget } from '@plugins/shared'
import { execSync } from 'node:child_process'
import { join } from 'node:path'
import { BuildExecutorSchema } from './schema'

export default async function runExecutor(_options: BuildExecutorSchema, context: ExecutorContext) {
	const projectConfig = context.projectsConfigurations!.projects[context.projectName!]
	const packageRoot = joinPathFragments(context.root, projectConfig.root)

	const androidPath = join(packageRoot, 'android')
	if (!context.configurationName || context.configurationName === 'android') {
		logger.info('Building APK for Android')
		// Sync android project
		await buildTarget(`${context.projectName}:sync:android`, context)
		buildAndroid(androidPath)
	}
	return { success: true }
}

function buildAndroid(androidPath: string): void {
	const command = process.platform === 'win32' ? 'gradlew' : './gradlew'
	execSync(`${command} assembleDebug`, { stdio: 'inherit', cwd: androidPath })
	logger.info(`APK has been built at ${join(androidPath, '/app/build/outputs/apk/debug/app-debug.apk')}`)
}
