#!/usr/bin/env bash
source "$GIT_CONFIG/git.paths.conf"
set -euo pipefail

# Load single source of truth
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

log() {
    printf "[SYNC] %s\n" "$1"
}

log "Starting project sync using SSOT paths"
log "Root: $GIT_ROOT"

mkdir -p "$GIT_DOCS" "$GIT_CONFIG" "$GIT_AUDIT" "$GIT_BIN" "$GIT_CHUNKS"

# -----------------------------
# Update requirements doc
# -----------------------------
cat > "$GIT_DOCS/git.requirements.md" << 'EOF'
Git Utility Requirements Specification
======================================

1. Naming Conventions
---------------------
- Filenames use dot-segment format.
- No underscores in any filenames.
- Directories use lowercase.
- Internal functions use CamelCase.

2. Exit Behavior
----------------
- Exit keys must be x or q.
- Numeric exit options prohibited.

3. Directory Layout
-------------------
bin/
config/
docs/
code/
arch/
data/chunks64/
audit/

4. Bundle Rules
---------------
- Bundles: docs.64, code.64, arch.64
- gzip + base64
- Decoded files: docs.txt, code.txt, arch.txt

5. Metadata Rules
-----------------
- Stored in git.utility.meta
- Must include version, description, timestamp

6. Audit Rules
--------------
- Naming audit
- Menu audit
- Structure audit
- All read external rule files

7. Reusability Rules
--------------------
- Rules stored in config/rules.*
EOF

log "Updated git.requirements.md"

# -----------------------------
# Update release doc
# -----------------------------
cat > "$GIT_DOCS/git.release.md" << 'EOF'
Git Utility Release Process
===========================

All releases must use the Release Wizard.

Steps:
1. Read metadata
2. Prompt for version + description
3. Update metadata
4. Run audits
5. Commit + tag automatically
EOF

log "Updated git.release.md"

# -----------------------------
# Update rules
# -----------------------------
cat > "$GIT_CONFIG/rules.naming" << 'EOF'
no_underscores=true
filename_format=dot-segment
function_format=CamelCase
directory_format=lowercase
EOF

cat > "$GIT_CONFIG/rules.menu" << 'EOF'
exit_keys=x,q
numeric_exit_disallowed=true
EOF

cat > "$GIT_CONFIG/rules.structure" << 'EOF'
required_directories=bin,config,docs,code,arch,data/chunks64,audit
required_files=docs/docs.txt,code/code.txt,arch/arch.txt
bundle_directory=data/chunks64
EOF

cat > "$GIT_CONFIG/rules.release" << 'EOF'
use_release_wizard=true
manual_git_commands_disallowed=true
manual_meta_edit_disallowed=true
EOF

log "Updated rules files"

# -----------------------------
# Regenerate bundles
# -----------------------------
regenerate_bundle() {
    local name="$1"
    local src="$2"
    local dst="$GIT_CHUNKS/$name.64"

    if [[ ! -f "$src" ]]; then
        log "[WARN] Missing source file: $src"
        return
    fi

    gzip -c "$src" | base64 > "$dst"
    log "Regenerated bundle: $dst"
}

regenerate_bundle "docs" "$GIT_DOCS/docs.txt"
regenerate_bundle "code" "$GIT_CODE/code.txt"
regenerate_bundle "arch" "$GIT_ARCH/arch.txt"

log "Bundle regeneration complete"
log "Project sync complete"

