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 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 {}