use std::collections::HashMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::grammar::GrammarReport;
use crate::readability::ReadabilityReport;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct FullAnalysisReport {
#[serde(skip_serializing_if = "Option::is_none")]
pub readability: Option<ReadabilityReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub grammar: Option<GrammarReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sticky_sentences: Option<StickySentencesReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pacing: Option<PacingReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sentence_length: Option<SentenceLengthReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transitions: Option<TransitionReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub overused_words: Option<OverusedWordsReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub repeated_phrases: Option<RepeatedPhrasesReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub echoes: Option<EchoesReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sensory: Option<SensoryReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub diction: Option<DictionReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cliches: Option<ClichesReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub consistency: Option<ConsistencyReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub acronyms: Option<AcronymReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub jargon: Option<BusinessJargonReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub complex_paragraphs: Option<ComplexParagraphsReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub conjunction_starts: Option<ConjunctionStartsReport>,
#[serde(skip_serializing_if = "Option::is_none")]
pub style: Option<StyleReport>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct StickySentencesReport {
pub overall_glue_index: f64,
pub sticky_count: usize,
pub semi_sticky_count: usize,
pub sticky_sentences: Vec<StickySentence>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct StickySentence {
pub sentence_num: usize,
pub glue_percentage: f64,
pub text: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct PacingReport {
pub fast_percentage: f64,
pub medium_percentage: f64,
pub slow_percentage: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct SentenceLengthReport {
pub avg_length: f64,
pub std_deviation: f64,
pub variety_score: f64,
pub shortest: usize,
pub longest: usize,
pub very_long: Vec<LongSentence>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct LongSentence {
pub sentence_num: usize,
pub word_count: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct TransitionReport {
pub sentences_with_transitions: usize,
pub transition_percentage: f64,
pub total_transitions: usize,
pub unique_transitions: usize,
pub most_common: Vec<TransitionCount>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct TransitionCount {
pub transition: String,
pub count: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct OverusedWordsReport {
pub overused_words: Vec<OverusedWord>,
pub total_unique_words: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct OverusedWord {
pub word: String,
pub count: usize,
pub frequency: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct RepeatedPhrasesReport {
pub total_repeated: usize,
pub phrases: Vec<RepeatedPhrase>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct RepeatedPhrase {
pub phrase: String,
pub count: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct EchoesReport {
pub total_echoes: usize,
pub echoes: Vec<Echo>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct Echo {
pub word: String,
pub paragraph: usize,
pub distance: usize,
pub occurrences: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct SensoryReport {
pub sensory_count: usize,
pub sensory_percentage: f64,
pub by_sense: HashMap<String, SenseData>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct SenseData {
pub count: usize,
pub percentage: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct DictionReport {
pub total_vague: usize,
pub unique_vague: usize,
pub most_common: Vec<VagueWordCount>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct VagueWordCount {
pub word: String,
pub count: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ClichesReport {
pub total_cliches: usize,
pub cliches: Vec<ClicheFound>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ClicheFound {
pub cliche: String,
pub count: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ConsistencyReport {
#[serde(skip_serializing_if = "Option::is_none")]
pub dialect: Option<String>,
pub total_issues: usize,
pub issues: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct AcronymReport {
pub total_acronyms: usize,
pub unique_acronyms: usize,
pub acronym_list: Vec<AcronymCount>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct AcronymCount {
pub acronym: String,
pub count: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct BusinessJargonReport {
pub total_jargon: usize,
pub unique_jargon: usize,
pub jargon_list: Vec<JargonFound>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct JargonFound {
pub jargon: String,
pub count: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ComplexParagraphsReport {
pub complex_count: usize,
pub percentage: f64,
pub complex_paragraphs: Vec<ComplexParagraph>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ComplexParagraph {
pub paragraph_num: usize,
pub avg_sentence_length: f64,
pub avg_syllables: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ConjunctionStartsReport {
pub count: usize,
pub percentage: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct StyleReport {
pub adverb_count: usize,
pub hidden_verbs: Vec<HiddenVerbSuggestion>,
pub style_score: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct HiddenVerbSuggestion {
pub noun: String,
pub verb: String,
pub count: usize,
}