use lazy_static::lazy_static;
use tantivy::schema::{Schema, TextFieldIndexing, FAST, INDEXED, STORED, STRING, TEXT};

pub const SCHEMA_VERSION: f32 = 1.1;

pub const TENANT_TOKEN: &str = "tenant_token";
pub const COLLECTION_ID: &str = "collection_id";
pub const DOC_ID: &str = "doc_id";
pub const FIELD_NAME: &str = "field_name";
pub const CONTENT: &str = "content";
pub const VERSION: &str = "version";

lazy_static! {
    pub static ref INDEX_SCHEMA: Schema = {
        let mut schema_builder = Schema::builder();
        schema_builder.add_text_field(TENANT_TOKEN, STRING);
        schema_builder.add_u64_field(COLLECTION_ID, INDEXED | FAST);
        schema_builder.add_text_field(DOC_ID, STRING | STORED);
        schema_builder.add_text_field(FIELD_NAME, STRING);
        schema_builder.add_text_field(
            CONTENT,
            TEXT.set_indexing_options(TextFieldIndexing::default().set_tokenizer("charabia")),
        );
        schema_builder.add_u64_field(VERSION, STORED);
        schema_builder.build()
    };
    pub static ref TENANT_TOKEN_FIELD: tantivy::schema::Field =
        INDEX_SCHEMA.get_field(TENANT_TOKEN).unwrap();
    pub static ref COLLECTION_ID_FIELD: tantivy::schema::Field =
        INDEX_SCHEMA.get_field(COLLECTION_ID).unwrap();
    pub static ref DOC_ID_FIELD: tantivy::schema::Field = INDEX_SCHEMA.get_field(DOC_ID).unwrap();
    pub static ref FIELD_NAME_FIELD: tantivy::schema::Field =
        INDEX_SCHEMA.get_field(FIELD_NAME).unwrap();
    pub static ref CONTENT_FIELD: tantivy::schema::Field = INDEX_SCHEMA.get_field(CONTENT).unwrap();
    pub static ref VERSION_FIELD: tantivy::schema::Field = INDEX_SCHEMA.get_field(VERSION).unwrap();
}
