/* * Copyright (c) 2025 Aldrik Ramaekers * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #pragma once #include "administration.hpp" typedef uint32_t i_err; #define I_ERR_SUCCESS 0 #define I_ERR_FAILED_UPLOAD 1 #define I_ERR_FAILED_QUERY 2 #define I_ERR_FAILED_IMPORT 3 typedef enum { IMPORT_STARTING, IMPORT_UPLOADING_FILE, IMPORT_QUERYING, IMPORT_WAITING_FOR_RESPONSE, IMPORT_DONE, } import_status; typedef struct { time_t started_at; invoice result; char file_path[MAX_LEN_PATH]; i_err error; import_status status; } import_invoice_request; typedef struct { bool (*upload_file)(char* file_path, char* file_id, size_t file_id_len); bool (*query_with_file)(char* query, size_t query_length, char* file_id, char** response); } ai_provider_impl; extern ai_provider_impl _chatgpt_api_provider; const char* import_error_to_str(i_err error); const char* import_status_to_str(import_status status); import_invoice_request* ai_document_to_invoice(char* file_path);