/******************************************************************************
 *
 *  Copyright (C) 2014 Google, Inc.
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at:
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 ******************************************************************************/

#pragma once

#include <stdbool.h>
#include <stddef.h>

#include "bt_types.h"

#ifdef __cplusplus
extern "C" {
#endif

static const char BTIF_CONFIG_MODULE[] = "btif_config_module";

typedef struct btif_config_section_iter_t btif_config_section_iter_t;

bool btif_config_has_section(const char *section);
bool btif_config_exist(const char *section, const char *key);
bool btif_config_get_int(const char *section, const char *key, int *value);
bool btif_config_set_int(const char *section, const char *key, int value);
bool btif_config_get_str(const char *section, const char *key, char *value, int *size_bytes);
bool btif_config_set_str(const char *section, const char *key, const char *value);
bool btif_config_get_bin(const char *section, const char *key, uint8_t *value, size_t *length);
bool btif_config_set_bin(const char *section, const char *key, const uint8_t *value, size_t length);
bool btif_config_remove(const char *section, const char *key);

size_t btif_config_get_bin_length(const char *section, const char *key);

const btif_config_section_iter_t *btif_config_section_begin(void);
const btif_config_section_iter_t *btif_config_section_end(void);
const btif_config_section_iter_t *btif_config_section_next(const btif_config_section_iter_t *section);
const char *btif_config_section_name(const btif_config_section_iter_t *section);

void btif_config_save(void);
void btif_config_flush(void);
bool btif_config_clear(void);

// TODO(zachoverflow): Eww...we need to move these out. These are peer specific, not config general.
bool btif_get_address_type(const BD_ADDR bd_addr, int *p_addr_type);
bool btif_get_device_type(const BD_ADDR bd_addr, int *p_device_type);

void btif_debug_config_dump(int fd);

#ifdef __cplusplus
}
#endif