# Default Configuration Event Template

This document contains the template for the `src/default_config_event.h` file that will be created during implementation.

## File: `src/default_config_event.h`

```c
#ifndef DEFAULT_CONFIG_EVENT_H
#define DEFAULT_CONFIG_EVENT_H

/*
 * Default Configuration Event Template
 * 
 * This header contains the default configuration values for the C Nostr Relay.
 * These values are used to create the initial kind 33334 configuration event
 * during first-time startup.
 * 
 * IMPORTANT: These values should never be accessed directly by other parts
 * of the program. They are only used during initial configuration event creation.
 */

// Default configuration key-value pairs
static const struct {
    const char* key;
    const char* value;
} DEFAULT_CONFIG_VALUES[] = {
    // Authentication
    {"auth_enabled", "false"},
    
    // Server Core Settings
    {"relay_port", "8888"},
    {"max_connections", "100"},
    
    // NIP-11 Relay Information (relay keys will be populated at runtime)
    {"relay_description", "High-performance C Nostr relay with SQLite storage"},
    {"relay_contact", ""},
    {"relay_software", "https://git.laantungir.net/laantungir/c-relay.git"},
    {"relay_version", "v1.0.0"},
    
    // NIP-13 Proof of Work (pow_min_difficulty = 0 means PoW disabled)
    {"pow_min_difficulty", "0"},
    {"pow_mode", "basic"},
    
    // NIP-40 Expiration Timestamp
    {"nip40_expiration_enabled", "true"},
    {"nip40_expiration_strict", "true"},
    {"nip40_expiration_filter", "true"},
    {"nip40_expiration_grace_period", "300"},
    
    // Subscription Limits
    {"max_subscriptions_per_client", "25"},
    {"max_total_subscriptions", "5000"},
    {"max_filters_per_subscription", "10"},
    
    // Event Processing Limits
    {"max_event_tags", "100"},
    {"max_content_length", "8196"},
    {"max_message_length", "16384"},
    
    // Performance Settings
    {"default_limit", "500"},
    {"max_limit", "5000"}
};

// Number of default configuration values
#define DEFAULT_CONFIG_COUNT (sizeof(DEFAULT_CONFIG_VALUES) / sizeof(DEFAULT_CONFIG_VALUES[0]))

// Function to create default configuration event
cJSON* create_default_config_event(const unsigned char* admin_privkey_bytes, 
                                   const char* relay_privkey_hex,
                                   const char* relay_pubkey_hex);

#endif /* DEFAULT_CONFIG_EVENT_H */
```

## Usage Notes

1. **Isolation**: These default values are completely isolated from the rest of the program
2. **Single Access Point**: Only accessed during `create_default_config_event()`
3. **Runtime Keys**: Relay keys are added at runtime, not stored as defaults
4. **No Direct Access**: Other parts of the program should never include this header directly
5. **Clean Separation**: Keeps default configuration separate from configuration logic

## Function Implementation

The `create_default_config_event()` function will:

1. Create a new cJSON event object with kind 33334
2. Add all default configuration values as tags
3. Add runtime-generated relay keys as tags
4. Use `nostr_core_lib` to sign the event with admin private key
5. Return the complete signed event ready for database storage

This approach ensures clean separation between default values and the configuration system logic.