# WiseTLP API Documentation

This document provides detailed information about WiseTLP's internal APIs and interfaces.

## Table of Contents

- [System Detection API](#system-detection-api)
- [AI Client API](#ai-client-api)
- [TLP Management API](#tlp-management-api)
- [Security API](#security-api)
- [Configuration API](#configuration-api)
- [Types and Structures](#types-and-structures)

## System Detection API

The system detection module provides comprehensive Linux system information gathering.

### `system.DetectSystem(ctx context.Context) (*Info, error)`

Detects basic system information including distribution, version, and package manager.

**Parameters:**
- `ctx`: Context for cancellation and timeout control

**Returns:**
- `*Info`: Basic system information structure
- `error`: Error if detection fails

**Example:**
```go
ctx := context.Background()
info, err := system.DetectSystem(ctx)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Distribution: %s %s\n", info.Distribution, info.Version)
```

### `system.GatherSystemInfo(ctx context.Context) (*types.SystemInfo, error)`

Collects comprehensive system information including hardware, power management, and kernel details.

**Parameters:**
- `ctx`: Context for cancellation and timeout control

**Returns:**
- `*types.SystemInfo`: Complete system information structure
- `error`: Error if gathering fails

**Gathered Information:**
- CPU details (model, cores, frequency, governor)
- Memory information (total, available, swap)
- Battery information (if present)
- Power supply status
- Kernel information and parameters
- Hardware details (chassis, manufacturer, storage)
- Distribution information

## AI Client API

The AI client module handles communication with various AI service providers.

### `ai.NewClient(config *types.AIConfig, logger *utils.Logger) *Client`

Creates a new AI client with the specified configuration.

**Parameters:**
- `config`: AI service configuration
- `logger`: Logger instance for structured logging

**Returns:**
- `*Client`: Configured AI client instance

### `ai.ConfigureClient(logger *utils.Logger) (*Client, error)`

Interactively configures an AI client by prompting the user for provider selection and credentials.

**Parameters:**
- `logger`: Logger instance

**Returns:**
- `*Client`: Configured AI client
- `error`: Configuration error

### `(*Client).GenerateConfig(ctx context.Context, sysInfo *types.SystemInfo, preferences *types.UserPreferences) (*types.TLPConfiguration, error)`

Generates an optimized TLP configuration using AI based on system information and user preferences.

**Parameters:**
- `ctx`: Context for request timeout
- `sysInfo`: Complete system information
- `preferences`: User power management preferences

**Returns:**
- `*types.TLPConfiguration`: Generated TLP configuration
- `error`: Generation error

## TLP Management API

The TLP management module handles TLP installation, configuration, and validation.

### `tlp.NewManager(logger *utils.Logger) *Manager`

Creates a new TLP manager instance.

**Parameters:**
- `logger`: Logger instance

**Returns:**
- `*Manager`: TLP manager instance

### `(*Manager).GetStatus(ctx context.Context) (*types.TLPStatus, error)`

Retrieves the current TLP installation and configuration status.

**Returns:**
- `*types.TLPStatus`: Current TLP status
- `error`: Status retrieval error

### `(*Manager).Install(ctx context.Context, sysInfo *system.Info) error`

Installs TLP using the appropriate package manager for the detected distribution.

**Parameters:**
- `ctx`: Context for operation timeout
- `sysInfo`: System information for package manager selection

**Returns:**
- `error`: Installation error

**Supported Package Managers:**
- apt (Ubuntu, Debian)
- dnf (Fedora, RHEL, CentOS)
- pacman (Arch, Manjaro)
- zypper (openSUSE)
- yum (Legacy RHEL/CentOS)
- apk (Alpine)

### `(*Manager).ApplyConfig(ctx context.Context, config *types.TLPConfiguration) error`

Applies a TLP configuration to the system.

**Parameters:**
- `ctx`: Context for operation timeout
- `config`: TLP configuration to apply

**Returns:**
- `error`: Application error

**Operations:**
1. Validates configuration
2. Backs up existing configuration
3. Writes new configuration
4. Reloads TLP service

### `(*Manager).ValidateConfig(config *types.TLPConfiguration) error`

Validates a TLP configuration for correctness and safety.

**Parameters:**
- `config`: Configuration to validate

**Returns:**
- `error`: Validation error

## Security API

The security module handles API key storage and privilege escalation.

### `security.NewKeyStore() (*KeyStore, error)`

Creates a new encrypted key store for API keys.

**Returns:**
- `*KeyStore`: Key store instance
- `error`: Initialization error

### `(*KeyStore).StoreAPIKey(provider, apiKey string) error`

Securely stores an API key for a provider.

**Parameters:**
- `provider`: AI service provider name
- `apiKey`: API key to store

**Returns:**
- `error`: Storage error

**Security Features:**
- AES-GCM encryption
- Master password protection
- Secure file permissions (0600)

### `(*KeyStore).RetrieveAPIKey(provider string) (string, error)`

Retrieves and decrypts an API key for a provider.

**Parameters:**
- `provider`: AI service provider name

**Returns:**
- `string`: Decrypted API key
- `error`: Retrieval error

### `security.NewPrivilegeManager(logger *utils.Logger) *PrivilegeManager`

Creates a new privilege manager for secure elevation.

### `(*PrivilegeManager).EscalateIfNeeded(args []string, operation string) error`

Escalates privileges using sudo if not already running as root.

**Parameters:**
- `args`: Command arguments for elevated execution
- `operation`: Description of operation requiring elevation

**Returns:**
- `error`: Escalation error

## Configuration API

The configuration module handles user preference gathering and processing.

### `config.GatherUserPreferences() (*types.UserPreferences, error)`

Interactively gathers user preferences for power management.

**Returns:**
- `*types.UserPreferences`: User preferences
- `error`: Gathering error

**Collected Preferences:**
- Power profile (balanced, performance, power saving, custom)
- Use case (general, development, gaming, server, multimedia, office)
- Battery priority (balanced, runtime, longevity)
- Performance mode (adaptive, maximum, efficient)
- Special requirements
- Custom settings

### `config.ValidatePreferences(preferences *types.UserPreferences) error`

Validates user preferences for consistency and conflicts.

**Parameters:**
- `preferences`: Preferences to validate

**Returns:**
- `error`: Validation error

### `config.GetRecommendedSettings(preferences *types.UserPreferences) map[string]string`

Generates recommended TLP settings based on user preferences.

**Parameters:**
- `preferences`: User preferences

**Returns:**
- `map[string]string`: Recommended TLP settings

## Types and Structures

### SystemInfo

Complete system information structure containing:

```go
type SystemInfo struct {
    CPU           CPUInfo           `json:"cpu"`
    Memory        MemoryInfo        `json:"memory"`
    Battery       *BatteryInfo      `json:"battery,omitempty"`
    PowerSupply   PowerSupplyInfo   `json:"power_supply"`
    Kernel        KernelInfo        `json:"kernel"`
    Distribution  DistributionInfo  `json:"distribution"`
    Hardware      HardwareInfo      `json:"hardware"`
    TLPStatus     TLPStatus         `json:"tlp_status"`
}
```

### UserPreferences

User power management preferences:

```go
type UserPreferences struct {
    PowerProfile        PowerProfile               `json:"power_profile"`
    UseCase            UseCase                    `json:"use_case"`
    BatteryPriority    BatteryPriority            `json:"battery_priority"`
    PerformanceMode    PerformanceMode            `json:"performance_mode"`
    CustomSettings     map[string]interface{}     `json:"custom_settings"`
    SpecialRequirements []string                  `json:"special_requirements"`
}
```

### TLPConfiguration

Generated TLP configuration:

```go
type TLPConfiguration struct {
    Settings    map[string]string `json:"settings"`
    Description string           `json:"description"`
    Rationale   map[string]string `json:"rationale"`
    Warnings    []string         `json:"warnings"`
    Generated   time.Time        `json:"generated"`
    SystemInfo  *SystemInfo      `json:"system_info"`
    Preferences *UserPreferences `json:"preferences"`
}
```

### AIConfig

AI service configuration:

```go
type AIConfig struct {
    Provider    AIProvider `json:"provider"`
    APIKey      string     `json:"-"` // Never serialized
    Endpoint    string     `json:"endpoint"`
    Model       string     `json:"model"`
    MaxTokens   int        `json:"max_tokens"`
    Temperature float64    `json:"temperature"`
}
```

## Error Handling

All APIs follow Go's standard error handling patterns:

- Functions return `error` as the last return value
- Errors are wrapped with context using `fmt.Errorf`
- Custom error types are used for specific error conditions
- Logging is performed at appropriate levels

## Context Usage

All long-running operations accept a `context.Context` parameter for:

- Cancellation support
- Timeout handling
- Request tracing
- Graceful shutdown

## Logging

WiseTLP uses structured logging throughout:

```go
logger := utils.NewLogger()
logger.Info("Operation completed", "duration", elapsed, "items", count)
logger.Error("Operation failed", "error", err, "context", ctx)
```

Log levels:
- `Debug`: Detailed debugging information
- `Info`: General operational information
- `Warn`: Warning conditions
- `Error`: Error conditions

## Testing

All APIs include comprehensive unit tests:

```bash
# Run API tests
go test ./internal/...
go test ./pkg/...

# Run with coverage
go test -cover ./...
```

Test patterns:
- Table-driven tests for multiple scenarios
- Mock interfaces for external dependencies
- Integration tests for component interactions
- Error condition testing
