# OpenAI Service

This package provides an OpenAI-powered service for job analysis and CV generation using the official OpenAI Go SDK.

## Features

- **Job Analysis**: Analyze job descriptions against CVs to determine fit and provide recommendations
- **CV Generation**: Create tailored CVs based on job descriptions
- **Cover Letter Generation**: Generate personalized cover letters

## Setup

1. Install the OpenAI Go SDK:
```bash
go get github.com/sashabaranov/go-openai
```

2. Set your OpenAI API key as an environment variable:
```bash
export OPENAI_API_KEY="your-api-key-here"
```

3. (Optional) Set a custom base URL:
```bash
export OPENAI_BASE_URL="https://your-custom-endpoint.com/v1"
```

## Usage

### Basic Job Analysis

```go
package main

import (
    "fmt"
    "os"
    
    "github.com/jobs-scraper/internal/pkg/domain"
    "github.com/jobs-scraper/internal/pkg/openai"
)

func main() {
    // Create service
    apiKey := os.Getenv("OPENAI_API_KEY")
    service := openai.NewOpenAIService(apiKey, "gpt-4o-mini")
    
    // Prepare job description
    jobDesc := domain.JobDescription{
        JobID:       1,
        Description: "Looking for a Go developer...",
        Criteria: map[string]string{
            "experience": "5+ years",
            "languages":  "Go, JavaScript",
        },
    }
    
    // Analyze job
    result, err := service.AnalyzeJobDescription(cv, jobDesc)
    if err != nil {
        panic(err)
    }
    
    fmt.Printf("Should apply: %t\n", result.ShouldApply())
    fmt.Printf("Confidence: %d%%\n", result.ConfidenceScore)
}
```

### Using Custom Base URL

You can configure a custom base URL in two ways:

**Method 1: Environment Variable**
```bash
export OPENAI_BASE_URL="https://api.openai-proxy.com/v1"
# Service will automatically use this URL
service := openai.NewOpenAIService(apiKey, "gpt-4o-mini")
```

**Method 2: Direct Parameter**
```go
// Use a custom base URL directly
service := openai.NewOpenAIServiceWithBaseURL(apiKey, "gpt-4o-mini", "https://api.openai-proxy.com/v1")

// Or use Azure OpenAI
service := openai.NewOpenAIServiceWithBaseURL(apiKey, "gpt-4", "https://your-resource.openai.azure.com/")
```

### Generate Tailored CV

```go
tailoredCV, err := service.GenerateCV(originalCV, jobDesc)
if err != nil {
    panic(err)
}
fmt.Println(tailoredCV)
```

### Generate Cover Letter

```go
coverLetter, err := service.GenerateCoverLetter(cv, jobDesc, "Tech Company Inc")
if err != nil {
    panic(err)
}
fmt.Println(coverLetter)
```

## Models

The service supports all OpenAI models. Common choices:

- `gpt-4o-mini` - Cost-effective, good performance (default)
- `gpt-4o` - Higher quality, more expensive
- `gpt-3.5-turbo` - Fastest, most cost-effective

## Environment Variables

- `OPENAI_API_KEY` - Your OpenAI API key (required)
- `OPENAI_BASE_URL` - Custom base URL for OpenAI API (optional)
- `OPENAI_MODEL` - Default model to use (optional)

## Response Structure

### JobAnalysisResult

```go
type JobAnalysisResult struct {
    Recommendation         string   // "apply" or "do_not_apply"
    ConfidenceScore        int      // 0-100
    MatchingSkills         []string
    MissingSkills          []string
    ExperienceMatch        string   // "excellent", "good", "fair", "poor"
    Summary                string
    ImprovementSuggestions []string
}
```

## Error Handling

The service handles common errors:
- API authentication issues
- Rate limiting
- Invalid JSON responses
- Network timeouts

Always check for errors when calling service methods.

## Testing

Run the example test:
```bash
cd internal/pkg/openai
go test -v
```

Make sure to set `OPENAI_API_KEY` environment variable before running tests that make actual API calls.
