#!/usr/bin/env bash
set -e

BASE="./"
DOCS="$BASE/docs"
JSON_BASE="$BASE/json-definitions"
JSON="$JSON_BASE/forms"
PAGES="$BASE/pages"
PHP="$BASE/php"
COMP="$PHP/components/life"

echo "Creating directories..."
mkdir -p "$DOCS"
mkdir -p "$JSON_BASE"
mkdir -p "$JSON"
mkdir -p "$PAGES"
mkdir -p "$PHP"
mkdir -p "$COMP"

###############################################
# JSON forms – correct path + filenames
###############################################

cat > "$JSON/homes_event.json" << 'EOF'
{
  "form_key": "homes_event",
  "label": "Home Event",
  "description": "Record a home-related life event.",
  "version": "1.0",
  "fields": [
    { "name": "event_date", "label": "Event Date", "type": "date", "required": true, "icon": "fa-calendar", "order": 1 },
    { "name": "title", "label": "Title", "type": "text", "required": true, "icon": "fa-home", "order": 2 },
    { "name": "address", "label": "Address", "type": "text", "required": false, "icon": "fa-map-marker-alt", "order": 3 },
    { "name": "city", "label": "City", "type": "text", "required": false, "icon": "fa-city", "order": 4 },
    { "name": "description", "label": "Description", "type": "textarea", "required": false, "icon": "fa-align-left", "order": 5 },
    { "name": "attachments", "label": "Attachments", "type": "attachments", "required": false, "multiple": true, "allowed_types": ["jpeg","png","gif","pdf","txt"], "icon": "fa-paperclip", "order": 6 }
  ]
}
EOF

cat > "$JSON/cars_event.json" << 'EOF'
{
  "form_key": "cars_event",
  "label": "Car Event",
  "description": "Record a car-related life event.",
  "version": "1.0",
  "fields": [
    { "name": "event_date", "label": "Event Date", "type": "date", "required": true, "icon": "fa-calendar", "order": 1 },
    { "name": "title", "label": "Title", "type": "text", "required": true, "icon": "fa-car", "order": 2 },
    { "name": "make", "label": "Make", "type": "text", "required": false, "icon": "fa-industry", "order": 3 },
    { "name": "model", "label": "Model", "type": "text", "required": false, "icon": "fa-car-side", "order": 4 },
    { "name": "year", "label": "Year", "type": "number", "required": false, "icon": "fa-hashtag", "order": 5 },
    { "name": "description", "label": "Description", "type": "textarea", "required": false, "icon": "fa-align-left", "order": 6 },
    { "name": "attachments", "label": "Attachments", "type": "attachments", "required": false, "multiple": true, "allowed_types": ["jpeg","png","gif","pdf","txt"], "icon": "fa-paperclip", "order": 7 }
  ]
}
EOF

cat > "$JSON/education_event.json" << 'EOF'
{
  "form_key": "education_event",
  "label": "Education Event",
  "description": "Record an education milestone.",
  "version": "1.0",
  "fields": [
    { "name": "event_date", "label": "Event Date", "type": "date", "required": true, "icon": "fa-calendar", "order": 1 },
    { "name": "title", "label": "Title", "type": "text", "required": true, "icon": "fa-graduation-cap", "order": 2 },
    { "name": "institution", "label": "Institution", "type": "text", "required": false, "icon": "fa-university", "order": 3 },
    { "name": "degree", "label": "Degree", "type": "text", "required": false, "icon": "fa-certificate", "order": 4 },
    { "name": "description", "label": "Description", "type": "textarea", "required": false, "icon": "fa-align-left", "order": 5 },
    { "name": "attachments", "label": "Attachments", "type": "attachments", "required": false, "multiple": true, "allowed_types": ["jpeg","png","gif","pdf","txt"], "icon": "fa-paperclip", "order": 6 }
  ]
}
EOF

###############################################
# PHP component – JSON form renderer
###############################################

cat > "$COMP/form.renderer.php" << 'EOF'
<?php
function life_base_path(): string {
    return dirname(__DIR__, 2); // /apps/ourlifeinpics/php/components -> /apps/ourlifeinpics
}

function life_load_form_definition(string $formKey): ?array {
    $base = life_base_path();
    $file = $base . "/json-definitions/forms/" . $formKey . ".json";
    if (!file_exists($file)) {
        return null;
    }
    $json = file_get_contents($file);
    return json_decode($json, true);
}

function life_render_form(array $form, string $action = "", string $method = "post") {
    echo '<form action="' . htmlspecialchars($action) . '" method="' . htmlspecialchars($method) . '" enctype="multipart/form-data" class="card card-body">';
    if (!empty($form['label'])) {
        echo '<h3>' . htmlspecialchars($form['label']) . '</h3>';
    }
    if (!empty($form['description'])) {
        echo '<p class="text-muted">' . htmlspecialchars($form['description']) . '</p>';
    }
    foreach ($form['fields'] as $field) {
        life_render_field($field);
    }
    echo '<button type="submit" class="btn btn-primary"><i class="fa fa-save"></i> Save</button>';
    echo '</form>';
}

function life_render_field(array $f) {
    $name  = $f['name'] ?? '';
    $label = $f['label'] ?? $name;
    $type  = $f['type'] ?? 'text';
    $help  = $f['help'] ?? '';
    $icon  = $f['icon'] ?? '';
    $required = !empty($f['required']);

    echo '<div class="form-group">';
    echo '<label for="' . htmlspecialchars($name) . '">';
    if ($icon) {
        echo '<i class="fa ' . htmlspecialchars($icon) . '"></i> ';
    }
    echo htmlspecialchars($label);
    if ($required) {
        echo ' <span class="text-danger">*</span>';
    }
    echo '</label>';

    switch ($type) {
        case 'textarea':
            echo '<textarea class="form-control" name="' . htmlspecialchars($name) . '" id="' . htmlspecialchars($name) . '"></textarea>';
            break;
        case 'number':
            echo '<input type="number" class="form-control" name="' . htmlspecialchars($name) . '" id="' . htmlspecialchars($name) . '">';
            break;
        case 'date':
            echo '<input type="date" class="form-control" name="' . htmlspecialchars($name) . '" id="' . htmlspecialchars($name) . '">';
            break;
        case 'attachments':
            $multiple = !empty($f['multiple']);
            $multipleAttr = $multiple ? ' multiple' : '';
            echo '<input type="file" class="form-control-file" name="' . htmlspecialchars($name) . ($multiple ? '[]' : '') . '" id="' . htmlspecialchars($name) . '"' . $multipleAttr . '>';
            break;
        default:
            echo '<input type="text" class="form-control" name="' . htmlspecialchars($name) . '" id="' . htmlspecialchars($name) . '">';
            break;
    }

    if ($help) {
        echo '<small class="form-text text-muted">' . htmlspecialchars($help) . '</small>';
    }
    echo '</div>';
}
EOF

###############################################
# JSON diagnostics – /apps/ourlifeinpics/pages/json.diagnostics.php
###############################################

cat > "$PAGES/json.diagnostics.php" << 'EOF'
<?php
$base = dirname(__DIR__);
$dir  = $base . "/json-definitions/forms";

$keys = ["homes_event", "cars_event", "education_event"];
?>
<!DOCTYPE html>
<html>
<head>
    <title>JSON Diagnostics – Life Archive</title>
</head>
<body>
<h1>JSON Diagnostics – Life Archive</h1>
<p>Base: <?= htmlspecialchars($base) ?></p>
<p>JSON dir: <?= htmlspecialchars($dir) ?></p>
<ul>
    <?php foreach ($keys as $k): ?>
        <?php $file = $dir . "/" . $k . ".json"; ?>
        <li>
            <?= htmlspecialchars($k) ?> :
            <?php if (file_exists($file)): ?>
                FOUND (<?= htmlspecialchars($file) ?>)
            <?php else: ?>
                <strong>NOT FOUND</strong> (expected <?= htmlspecialchars($file) ?>)
            <?php endif; ?>
        </li>
    <?php endforeach; ?>
</ul>
</body>
</html>
EOF

echo "Installer v6 complete: JSON folders fixed, forms written, diagnostics added."

