export interface HadithResponseModel {
  status: number;
  message: string;
  postion: number;
  meta: any;
  took: number;
  timed_out: boolean;
  _shards: Shards;
  hits: Hits;
  aggregations: Aggregations;
  params: Params;
}
export interface HadithResponseShowModel {
  status: number
  message: string
  postion: number
  meta: any
  _index: string
  _id: string
  _version: number
  _seq_no: number
  _primary_term: number
  found: boolean
  _source: Source
}

export interface Shards {
  total: number;
  successful: number;
  skipped: number;
  failed: number;
}

export interface Hits {
  total: Total;
  max_score: number;
  hits: Hit[];
}

export interface Total {
  value: number;
  relation: string;
}

export interface Hit {
  _index: string;
  _id: string;
  _score: number;
  _source: Source;
  highlight?: Highlight;
}

export interface Source {
  id: string;
  address: Address;
  content: string;
  meta: Meta;
  parag_order: number;
  style_tag: string;
  heading_level: number;
  sub_ayehs: any[];
  sub_hadithes: any[];
  type_key: string;
  type_title: string;
  lang: string;
  tocs: string[];
  xml: string;
  ai_embeddings?: number[];
  ai_classes?: AiClass[];
}

export interface Address {
  book_title: string;
  page_end: number;
  page_num: number;
  vol_id: string;
  vol_num: string;
  vol_title: string;
}

export interface Meta {
  hadith_description: string;
  hadith_sanad: string;
  hadith_references: any[];
}

export interface AiClass {
  score: number;
  label: string;
}

export interface Highlight {
  "content.fa": string[];
  xml: string[];
  "ai_classes.label"?: string[];
  "content.ph": string[];
  content: string[];
  type_key: string[];
}

export interface Aggregations {
  book_title: BookTitle;
  ai_classes: AiClasses;
  ai_keywords: AiKeywords;
  vol_title: VolTitle;
  type_title: TypeTitle;
  lang: Lang;
}

export interface BookTitle {
  doc_count_error_upper_bound: number;
  sum_other_doc_count: number;
  buckets: Bucket[];
}

export interface Bucket {
  key: string;
  doc_count: number;
}

export interface AiClasses {
  doc_count_error_upper_bound: number;
  sum_other_doc_count: number;
  buckets: Bucket2[];
}

export interface Bucket2 {
  key: string;
  doc_count: number;
}

export interface AiKeywords {
  doc_count_error_upper_bound: number;
  sum_other_doc_count: number;
  buckets: Bucket3[];
}

export interface Bucket3 {
  key: string;
  doc_count: number;
}

export interface VolTitle {
  doc_count_error_upper_bound: number;
  sum_other_doc_count: number;
  buckets: Bucket4[];
}

export interface Bucket4 {
  key: string;
  doc_count: number;
}

export interface TypeTitle {
  doc_count_error_upper_bound: number;
  sum_other_doc_count: number;
  buckets: Bucket5[];
}

export interface Bucket5 {
  key: string;
  doc_count: number;
}

export interface Lang {
  doc_count_error_upper_bound: number;
  sum_other_doc_count: number;
  buckets: Bucket6[];
}

export interface Bucket6 {
  key: string;
  doc_count: number;
}

export interface Params {
  index: string;
  body: Body;
}

export interface Body {
  query: Query;
  from: string;
  size: string;
  aggs: Aggs;
  highlight: Highlight2;
}

export interface Query {
  bool: Bool;
}

export interface Bool {
  must: Must[];
}

export interface Must {
  bool: Bool2;
}

export interface Bool2 {
  should?: Should[];
  filter?: Filter;
}

export interface Should {
  match_phrase?: MatchPhrase;
  match?: Match;
  bool?: Bool3;
}

export interface MatchPhrase {
  "content.ph": ContentPh;
}

export interface ContentPh {
  query: string;
  boost: number;
}

export interface Match {
  "content.fa"?: ContentFa;
  content?: Content;
  "content.ar"?: ContentAr;
}

export interface ContentFa {
  query: string;
  boost: number;
}

export interface Content {
  query: string;
  boost: number;
}

export interface ContentAr {
  query: string;
  boost: number;
}

export interface Bool3 {
  must: Must2[];
}

export interface Must2 {
  match: Match2;
}

export interface Match2 {
  book_title: BookTitle2;
}

export interface BookTitle2 {
  query: string;
  boost: number;
}

export interface Filter {
  bool: Bool4;
}

export interface Bool4 {
  must: Must3[];
}

export interface Must3 {
  term: Term;
}

export interface Term {
  type_key: string;
}

export interface Aggs {
  book_title: BookTitle3;
  ai_classes: AiClasses2;
  ai_keywords: AiKeywords2;
  vol_title: VolTitle2;
  type_title: TypeTitle2;
  lang: Lang2;
}

export interface BookTitle3 {
  terms: Terms;
}

export interface Terms {
  field: string;
  size: number;
}

export interface AiClasses2 {
  terms: Terms2;
}

export interface Terms2 {
  field: string;
  size: number;
}

export interface AiKeywords2 {
  terms: Terms3;
}

export interface Terms3 {
  field: string;
  size: number;
}

export interface VolTitle2 {
  terms: Terms4;
}

export interface Terms4 {
  field: string;
  size: number;
}

export interface TypeTitle2 {
  terms: Terms5;
}

export interface Terms5 {
  field: string;
  size: number;
}

export interface Lang2 {
  terms: Terms6;
}

export interface Terms6 {
  field: string;
  size: number;
}

export interface Highlight2 {
  pre_tags: string[];
  post_tags: string[];
  fields: Fields;
  require_field_match: boolean;
  fragment_size: number;
  number_of_fragments: number;
  boundary_scanner: string;
}

export interface Fields {
  "*": GeneratedType;
}

export interface GeneratedType {}


export interface Root {
  _index: string
  _id: string
  _score: any
  _source: Source
  sort: number[]
}

export type Synonym = {
  title: string;
  enable: boolean;
  enableForm: boolean;
  subTitles: [
    {
      title: string;
      active: boolean;
    }
  ];
};