# Configuration Guide

## Organization and Domain Configuration

### Crossplane API Group

The Crossplane provider uses a configurable API group. Set the following environment variable:

**Portal**:
```env
NEXT_PUBLIC_CROSSPLANE_API_GROUP=proxmox.sankofa.nexus
```

**Default**: `proxmox.sankofa.nexus`

To use a different organization:
1. Update the Crossplane provider's API group in `crossplane-provider-proxmox/apis/v1alpha1/groupversion_info.go`
2. Set `NEXT_PUBLIC_CROSSPLANE_API_GROUP` to match

### Git Repository URL

**ArgoCD Application** (`gitops/apps/argocd/application.yaml`):
- Uses environment variable substitution: `${GIT_REPO_URL}`
- Default: `https://github.com/YOUR_ORG/sankofa-phoenix`

To configure:
```bash
export GIT_REPO_URL=https://github.com/your-org/sankofa-phoenix
kubectl apply -f gitops/apps/argocd/application.yaml
```

Or edit the file directly before applying.

### Go Module Path

**File**: `crossplane-provider-proxmox/go.mod`

Current: `module github.com/sankofa/crossplane-provider-proxmox`

To change:
1. Update `go.mod`:
   ```go
   module github.com/your-org/crossplane-provider-proxmox
   ```

2. Update all imports in Go files:
   ```bash
   find crossplane-provider-proxmox -name "*.go" -exec sed -i 's|github.com/sankofa|github.com/your-org|g' {} \;
   ```

3. Run `go mod tidy`

## Domain Configuration

All domain placeholders should be replaced with actual domains:

- `sankofa.nexus` → Your actual domain (currently using sankofa.nexus as placeholder)
- Replace with your actual domain in production
- `sankofa.nexus` → Your actual domain (if different)

## Sovereign Identity Configuration (Keycloak)

### Keycloak Setup

Sankofa Phoenix uses Keycloak for sovereign identity management (NO Azure dependencies):

1. **Deploy Keycloak**:
   ```bash
   docker-compose up -d keycloak
   # Or use Kubernetes: kubectl apply -f gitops/apps/keycloak/
   ```

2. **Configure Environment Variables**:
   ```env
   KEYCLOAK_URL=http://localhost:8080
   KEYCLOAK_REALM=master
   KEYCLOAK_CLIENT_ID=sankofa-api
   KEYCLOAK_CLIENT_SECRET=your-client-secret
   KEYCLOAK_MULTI_REALM=true
   ```

3. **Create Clients**:
   - API client: `sankofa-api` (confidential)
   - Portal client: `portal-client` (confidential)

4. **Multi-Realm Support** (Optional):
   - Set `KEYCLOAK_MULTI_REALM=true` for tenant isolation
   - Each tenant gets its own Keycloak realm automatically

See [Identity Setup Guide](./docs/tenants/IDENTITY_SETUP.md) for detailed instructions.

## Multi-Tenancy Configuration

### Enable Multi-Tenancy

```env
ENABLE_MULTI_TENANT=true
DEFAULT_TENANT_ID=  # Leave empty for system resources
BLOCKCHAIN_IDENTITY_ENABLED=true
```

### Billing Configuration

```env
BILLING_GRANULARITY=SECOND  # SECOND, MINUTE, HOUR
BLOCKCHAIN_BILLING_ENABLED=true
```

See [Tenant Management Guide](./docs/tenants/TENANT_MANAGEMENT.md) and [Billing Guide](./docs/tenants/BILLING_GUIDE.md) for details.

## Environment Variables Summary

### Required for Production

- `JWT_SECRET` - Must be changed from default
- `DB_PASSWORD` - Must be changed from default
- `KEYCLOAK_URL` - Actual Keycloak instance
- `KEYCLOAK_CLIENT_ID` - Keycloak client ID
- `KEYCLOAK_CLIENT_SECRET` - Keycloak client secret
- `NEXT_PUBLIC_*` - All public URLs must point to production services

### Optional but Recommended

- `ENABLE_MULTI_TENANT` - Enable multi-tenancy (default: false)
- `KEYCLOAK_MULTI_REALM` - Enable multi-realm support (default: false)
- `BILLING_GRANULARITY` - Billing granularity (default: HOUR)
- `BLOCKCHAIN_IDENTITY_ENABLED` - Enable blockchain identity (default: false)
- `BLOCKCHAIN_BILLING_ENABLED` - Enable blockchain billing (default: false)
- `SENTRY_DSN` - Error tracking
- `BLOCKCHAIN_*` - If using blockchain features
- `LOG_LEVEL` - Set to `info` or `warn` in production

## Quick Configuration Checklist

- [ ] Update `JWT_SECRET` in production
- [ ] Update `DB_PASSWORD` in production
- [ ] Deploy and configure Keycloak
- [ ] Create Keycloak clients (API and Portal)
- [ ] Set `KEYCLOAK_CLIENT_SECRET` in production
- [ ] Enable multi-tenancy if needed (`ENABLE_MULTI_TENANT=true`)
- [ ] Configure billing granularity (`BILLING_GRANULARITY`)
- [ ] Set `NEXT_PUBLIC_CROSSPLANE_API_GROUP` if different from default
- [ ] Update Git repository URL in ArgoCD application
- [ ] Replace all domain placeholders
- [ ] Configure error tracking (Sentry or custom)
- [ ] Set up proper logging in production
- [ ] Review and update all `localhost` defaults
- [ ] Run database migrations: `cd api && npm run db:migrate`

