#ifndef ACCENT_EXTRACT_CANDIDATES_H
#define ACCENT_EXTRACT_CANDIDATES_H
#include <stdbool.h>
#include <stddef.h>
#include "colour.h"
#include "arena.h"
typedef struct {
RGB colour;
Oklab lab;
double red_sum;
double green_sum;
double blue_sum;
double prevalence;
} ColourCluster;
typedef struct {
ColourCluster *items;
size_t count;
size_t capacity;
double merge_distance;
Arena arena;
} CandidateSet;
typedef struct {
RGB colour;
double prevalence;
float score;
} ScoredCandidate;
void candidates_init(CandidateSet *set);
void candidates_destroy(CandidateSet *set);
bool candidates_add(CandidateSet *set, RGB colour, double prevalence);
/* Results are owned by set and remain valid until candidates_destroy(). */
bool candidates_rank(CandidateSet *set, size_t limit, RGB background,
float minimum_score, ScoredCandidate **results,
size_t *result_count);
void candidates_tweak(ScoredCandidate *results, size_t result_count,
RGB background);
#endif