#!/usr/bin/env bash
# Scaffold a new BW WordPress plugin in wp-content/plugins/.
# Usage: tools/new-plugin.sh bw-<slug> "BW <Display Name>" [description]

source "$(dirname "$0")/lib/common.sh"

SLUG="${1:-}"
NAME="${2:-}"
DESC="${3:-A Bowden Works WordPress plugin.}"

[[ -n "$SLUG" && -n "$NAME" ]] || die "Usage: $0 bw-<slug> \"BW <Display Name>\" [description]"
[[ "$SLUG" =~ ^bw-[a-z0-9-]+$ ]] || die "Slug must match bw-[a-z0-9-]+"

require_rian

PLUGIN_DIR="${BW_PLUGINS_DIR}/${SLUG}"
TEMPLATES="${BW_REPO_ROOT}/docs/templates"

[[ ! -d "$PLUGIN_DIR" ]] || die "Plugin directory already exists: $PLUGIN_DIR"

SLUG_U=$(slug_to_underscore "$SLUG")
SLUG_UU=$(slug_to_upper_underscore "$SLUG")
DATE=$(date -u +%Y-%m-%d)
VERSION="0.1.0"

log_info "Scaffolding ${NAME} (${SLUG}) version ${VERSION}..."

sg bw-plugins-dev -c "mkdir -p '${PLUGIN_DIR}' '${PLUGIN_DIR}/includes' '${PLUGIN_DIR}/admin' '${PLUGIN_DIR}/assets/css' '${PLUGIN_DIR}/assets/js' '${PLUGIN_DIR}/assets/images' '${PLUGIN_DIR}/languages' '${PLUGIN_DIR}/vendor' '${PLUGIN_DIR}/docs'"

# Jinja-like substitution.
sub() {
	sed \
		-e "s|{{SLUG}}|${SLUG}|g" \
		-e "s|{{PLUGIN_DISPLAY_NAME}}|${NAME}|g" \
		-e "s|{{DESCRIPTION}}|${DESC}|g" \
		-e "s|{{VERSION}}|${VERSION}|g" \
		-e "s|{{DATE}}|${DATE}|g" \
		-e "s|{{SLUG_UNDERSCORE}}|${SLUG_U}|g" \
		-e "s|{{SLUG_UPPER_UNDERSCORE}}|${SLUG_UU}|g" \
		"$1"
}

write_out() {
	local src="$1" dest="$2"
	sub "$src" | sg bw-plugins-dev -c "tee '$dest' > /dev/null"
}

write_out "${TEMPLATES}/plugin-main.php.tmpl" "${PLUGIN_DIR}/${SLUG}.php"
write_out "${TEMPLATES}/CLAUDE.md.tmpl"       "${PLUGIN_DIR}/CLAUDE.md"
write_out "${TEMPLATES}/README.md.tmpl"       "${PLUGIN_DIR}/README.md"
write_out "${TEMPLATES}/CHANGELOG.md.tmpl"    "${PLUGIN_DIR}/CHANGELOG.md"
write_out "${TEMPLATES}/uninstall.php.tmpl"   "${PLUGIN_DIR}/uninstall.php"

for f in ARCHITECTURE SPEC ROADMAP TESTING KNOWN-ISSUES HANDOFF-NOTES SESSION-LOG; do
	write_out "${TEMPLATES}/docs/${f}.md.tmpl" "${PLUGIN_DIR}/docs/${f}.md"
done

# LICENSE (GPL-2.0+)
sg bw-plugins-dev -c "cat > '${PLUGIN_DIR}/LICENSE' << 'EOF'
This plugin is licensed under the GNU General Public License v2.0 or later.
See https://www.gnu.org/licenses/gpl-2.0.html for the full license text.
EOF"

# Placeholder .pot file location
sg bw-plugins-dev -c "touch '${PLUGIN_DIR}/languages/.gitkeep'"

# Vendor plugin-update-checker: copy from a shared location if available, else mark as TODO.
PUC_SRC="${BW_REPO_ROOT}/tools/vendor-sources/plugin-update-checker"
if [[ -d "$PUC_SRC" ]]; then
	sg bw-plugins-dev -c "cp -r '$PUC_SRC' '${PLUGIN_DIR}/vendor/plugin-update-checker'"
	log_ok "Vendored plugin-update-checker"
else
	log_warn "plugin-update-checker not found at ${PUC_SRC}"
	log_warn "  Download from https://github.com/YahnisElsts/plugin-update-checker/releases"
	log_warn "  and extract to ${PUC_SRC}, then re-run this to vendor it, or place directly in ${PLUGIN_DIR}/vendor/"
fi

# Activate on the dev site.
log_info "Activating plugin on dev site..."
if bw_wp plugin activate "${SLUG}" 2>&1 | grep -q Success; then
	log_ok "Plugin activated"
else
	log_warn "Plugin activation failed or returned non-success. Check: bw_wp plugin list"
fi

log_ok "Scaffold complete: ${PLUGIN_DIR}"
echo
echo "Next steps:"
echo "  1. Edit ${PLUGIN_DIR}/${SLUG}.php to start building"
echo "  2. Update ${PLUGIN_DIR}/docs/SPEC.md with real requirements"
echo "  3. Add a product page on plugins.bowden.works for this plugin"
echo "  4. When ready to release: ${BW_REPO_ROOT}/tools/release.sh ${SLUG} ${VERSION}"
