#!/usr/bin/env php
<?php

use WPDesk\Init\Util\PhpFileDumper;
use WPDesk\Init\Plugin\DefaultHeaderParser;

$autoloadPath = $_composer_autoload_path ?? __DIR__ . '/../vendor/autoload.php';
if (!file_exists($autoloadPath)) {
    echo "\033[31mError: Autoloader not found. Please run composer install.\033[0m\n";
    exit(1);
}
require_once $autoloadPath;

function display_help() {
    echo "Usage: " . basename(__FILE__) . " <cache_dir>\n";
    echo "Initialize a WordPress plugin by parsing the input file and generating output.\n";
    echo "\n";
    echo "Arguments:\n";
    echo "  <cache_dir>   Path to the output file to generate\n";
}

function get_possible_plugin_files(): array {
	$plugins_dir = opendir(getcwd());
	$plugin_files = [];
	while ( ( $file = readdir( $plugins_dir ) ) !== false ) {
		if ( str_starts_with( $file, '.' ) || str_ends_with( $file, '.php' ) === false || is_dir( $file ) ) {
			continue;
		}

		$plugin_files[] = $file;
	}

	closedir( $plugins_dir );

	return $plugin_files;
}

if (in_array('--help', $argv) || in_array('-h', $argv)) {
    display_help();
    exit(0);
}

if ($argc < 2 || in_array('--help', $argv) || in_array('-h', $argv)) {
    echo "\033[31mError: Missing required arguments.\033[0m\n";
	display_help();
    exit(1);
}

$outputDir = rtrim($argv[1], '/\\') . '/';

$parser = new DefaultHeaderParser();
$plugin_header = [];

foreach (get_possible_plugin_files() as $file) {
	$plugin_header = $parser->parse($file);

	if (! empty($plugin_header)) {
		break;
	}
}

if (empty($plugin_header)) {
	echo "\033[31mError: No plugin data found. File has to be accessible from project's root folder and include required WordPress plugin headers.\033[0m\n";
	exit(1);
}

try {
    $dumper = new PhpFileDumper();
    $dumper->dump($plugin_header, $outputDir . 'plugin.php');

    echo "\033[32mSuccess: Plugin data generated.\033[0m\n";
    exit(0);
} catch (Exception $e) {
    echo "\033[31mError: " . $e->getMessage() . "\n" . $e->getTraceAsString() . "\033[0m\n";
    exit(1);
}