package store

import "context"

func (db *DB) CreateExportJob(ctx context.Context, userID int64, leadIDsJSON string, rowCount int) (int64, error) {
	res, err := db.ExecContext(ctx, `
		INSERT INTO export_jobs (user_id, lead_ids, row_count) VALUES (?, ?, ?)`,
		userID, leadIDsJSON, rowCount)
	if err != nil {
		return 0, err
	}
	return res.LastInsertId()
}

func (db *DB) ListExportJobs(ctx context.Context, userID int64, limit int) ([]ExportJob, error) {
	rows, err := db.QueryContext(ctx, `
		SELECT id, user_id, lead_ids, row_count, created_at
		FROM export_jobs WHERE user_id = ? ORDER BY created_at DESC LIMIT ?`, userID, limit)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	var out []ExportJob
	for rows.Next() {
		var j ExportJob
		if err := rows.Scan(&j.ID, &j.UserID, &j.LeadIDs, &j.RowCount, &j.CreatedAt); err != nil {
			return nil, err
		}
		out = append(out, j)
	}
	return out, rows.Err()
}

func (db *DB) GetExportJob(ctx context.Context, userID, jobID int64) (*ExportJob, error) {
	row := db.QueryRowContext(ctx, `
		SELECT id, user_id, lead_ids, row_count, created_at
		FROM export_jobs WHERE id = ? AND user_id = ?`, jobID, userID)
	var j ExportJob
	err := row.Scan(&j.ID, &j.UserID, &j.LeadIDs, &j.RowCount, &j.CreatedAt)
	if err != nil {
		return nil, err
	}
	return &j, nil
}
