#ifndef ACCENT_EXTRACT_COLOUR_H
#define ACCENT_EXTRACT_COLOUR_H

#include <stdbool.h>
#include <stdint.h>

#include "../vendor/accent_score.h"

typedef struct {
    double l;
    double a;
    double b;
} Oklab;

typedef struct {
    double red;
    double green;
    double blue;
    double alpha;
} ColourAccumulator;

bool colour_parse_hex(const char *text, RGB *out);
double colour_srgb_to_linear(double value);
double colour_linear_to_srgb(double value);
RGB colour_from_linear(double red, double green, double blue);
Oklab colour_to_oklab(RGB colour);
double colour_oklab_distance(Oklab left, Oklab right);
RGB colour_tweak_accent(RGB colour, RGB background);

void colour_accumulator_add_u8(ColourAccumulator *acc, uint8_t red,
                               uint8_t green, uint8_t blue, uint8_t alpha);
void colour_accumulator_add_u16(ColourAccumulator *acc, uint16_t red,
                                uint16_t green, uint16_t blue, uint16_t alpha);
bool colour_accumulator_average(const ColourAccumulator *acc, RGB *out);

#endif