// Written by retoor@molodetz.nl

// This source code retrieves an API key from environment variables or defaults to a hardcoded key if none are found.

// Uses the C standard library functions from stdlib.h for environment management and stdio.h for error handling.

// MIT License

#ifndef R_AUTH_H
#define R_AUTH_H

#include <stdlib.h>
#include <stdio.h>

enum AUTH_TYPE {
    AUTH_TYPE_NONE,
    AUTH_TYPE_API_KEY,
    AUTH_TYPE_FREE
};

int auth_type = AUTH_TYPE_NONE;

void auth_free(){
    auth_type = AUTH_TYPE_FREE;
}

void auth_init() {
    
    char *api_key = NULL;
    if(auth_type != AUTH_TYPE_FREE) {
    

    api_key = getenv("R_KEY");
    if (api_key) {
        auth_type = AUTH_TYPE_API_KEY;
        return;
    }
    api_key = getenv("OPENAI_API_KEY");
    if (api_key) {
        auth_type = AUTH_TYPE_API_KEY;
        return;
    }
    }
    auth_type = AUTH_TYPE_FREE;
    return;
}

const char *resolve_api_key() {
    static char *api_key = NULL;
    if(auth_type != AUTH_TYPE_FREE) {
    
    api_key = getenv("R_KEY");
    if (api_key) {
        auth_type = AUTH_TYPE_API_KEY;
        return api_key;
    }
    api_key = getenv("OPENAI_API_KEY");
    if (api_key) {
        auth_type = AUTH_TYPE_API_KEY;
        return api_key;
    }
    }
    auth_type = AUTH_TYPE_FREE;
    api_key = "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";
    return api_key;
}

#endif