import 'dart:math';
import '../models/questionnaire.dart';

/// Text generator for evaluation questionnaires
/// Generates appropriate text responses based on question type
class TextGenerator {
  static final Random _random = Random();

  // 启发类文案库
  static const List<String> inspirationTexts = [
    "老师认真负责的态度和丰富的讲课内容，让我明白了扎实的知识积累对学习的重要性",
    "老师能够深入了解学生的学习状况，启发我学会了关注细节、因材施教的道理",
    "老师授课有条理有重点，教会我做事要分清主次、抓住关键的思维方法",
    "老师善于用凝练的语言表达复杂内容，让我学会了如何提炼要点、化繁为简",
    "老师对深奥现象解释得通俗易懂，启发我认识到深入浅出是一种重要的能力",
    "老师采用多种教学方式让学生更好接受知识，让我明白了方法灵活运用的重要性",
    "老师既严格要求又鼓励学生发言，教会我严慈相济、宽严并济的处事原则",
    "老师能够调动学生的积极性，启发我懂得了激发他人潜能和主动性的价值",
    "老师课堂气氛活跃但不失严谨，让我理解了轻松与高效可以兼得的道理",
    "老师治学严谨、循循善诱的风格，激励我要保持谦逊认真的学习态度和钻研精神",
    "老师对学科的热爱和投入，让我感受到保持热情对做好任何事情的重要意义",
    "老师善于联系实际讲解理论知识，启发我学会了理论联系实际的思维方式",
    "老师注重培养学生的自主学习能力，让我明白了授人以渔的教育真谛",
    "老师对每个问题的耐心解答，教会我做事要有耐心和责任心",
    "老师在课堂上的幽默感，让我懂得了适度的轻松能够提高工作和学习效率",
    "老师严格的课堂管理，启发我认识到纪律和规则对集体活动的重要性",
    "老师丰富的专业知识储备，激励我要不断充实自己、拓宽知识面",
    "老师对学生的一视同仁，让我理解了公平公正待人的重要价值",
    "老师善于鼓励和肯定学生，教会我正面激励对他人成长的积极作用",
    "老师清晰的逻辑思维，启发我学会了有条理地思考和表达问题",
    "老师对教学的精心准备，让我明白了充分准备是做好工作的前提",
    "老师善于归纳总结重点，教会我抓住事物本质和核心的思维能力",
    "老师对学生问题的重视，启发我懂得了倾听和尊重他人意见的重要性",
    "老师灵活的教学节奏把握，让我学会了根据实际情况灵活调整的智慧",
    "老师富有感染力的授课方式，教会我热情和真诚能够打动他人",
    "老师注重学生的全面发展，启发我认识到综合素质培养的重要性",
    "老师对细节的关注，让我明白了细节决定成败的道理",
    "老师善于启发学生独立思考，教会我批判性思维和质疑精神的可贵",
    "老师持续学习、与时俱进的态度，激励我要保持终身学习的理念",
    "老师对学生的关心和帮助，让我理解了教书育人、为人师表的深刻内涵",
  ];

  // 建议类文案库
  static const List<String> suggestionTexts = [
    '无',
    '没有',
    "老师讲课很好，很认真负责，我没有什么建议，希望老师继续保持现有的教学方式",
    "老师授课认真，课堂效率高，我觉得一切都很好，暂时没有什么意见和建议",
    "老师上课既幽默又严格，教学方法很适合我们，没有需要改进的地方",
    "老师治学严谨，循循善诱，对老师的授课我非常满意，请老师保持这种教学状态",
    "老师授课有条理有重点，我认为已经做得很到位了，没有什么建议可提",
    "老师善于用凝练的语言讲解复杂内容，教学方式很好，希望老师继续发扬优点",
    "老师讲课内容详细，条理清晰，我觉得没有什么需要调整的地方，一切都很棒",
    "老师讲授认真，内容丰富，我对教学方式非常认可，请老师保持现在的风格",
    "老师对待教学认真负责，能够调动学生积极性，我没有什么意见，希望老师继续保持",
    "老师课堂效率高，气氛活跃，整节课学下来很有收获，暂时想不到需要改进的地方",
    "老师教学态度端正，讲课思路清晰，我觉得非常好，没有什么意见和建议",
    "老师授课生动有趣，深入浅出，对老师的教学我很满意，请老师保持下去",
    "老师对学生要求严格但不失关怀，教学方法得当，我没有什么建议可提",
    "老师讲课重点突出，内容充实，我认为一切都很好，希望老师继续保持",
    "老师课堂互动性强，能照顾到每个学生，我觉得没有需要改进的地方",
    "老师备课充分，讲解透彻，对老师的授课非常认可，暂时没有什么意见",
    "老师教学经验丰富，方法多样，我觉得已经很优秀了，请老师保持现状",
    "老师语言表达清晰，逻辑性强，我没有什么建议，希望老师继续发扬",
    "老师授课节奏把握得很好，我认为非常合适，没有什么需要调整的",
    "老师对待学生耐心负责，教学效果显著，我很满意，请老师保持",
    "老师讲课富有激情，能感染学生，我觉得很好，暂时没有什么意见",
    "老师专业知识扎实，讲解到位，对老师的教学我非常认可，没有建议",
    "老师善于引导学生思考，启发性强，我认为一切都很好，请老师保持",
    "老师课堂管理有序，教学效率高，我觉得没有什么需要改进的地方",
    "老师授课风格独特，深受学生喜爱，我没有什么意见和建议",
    "老师讲课深入浅出，通俗易懂，我认为非常好，希望老师继续保持",
    "老师对学生一视同仁，公平公正，我很满意老师的教学方式",
    "老师教学方法科学合理，效果突出，我觉得没有需要调整的地方",
    "老师认真批改作业，及时反馈，对老师的工作我非常认可，请保持",
    "老师课堂内容丰富多彩，讲解细致入微，我没有什么建议，一切都很好",
  ];

  // 总体评价文案库
  static const List<String> overallTexts = [
    "老师讲课认真负责，课程内容充实丰富，理论与实践结合得很好，让我收获颇丰，对专业知识有了更深入的理解",
    "老师授课条理清晰，课程设置合理，由浅入深，循序渐进，学习过程中既有挑战性又能跟上节奏",
    "老师教学方法灵活多样，课程内容非常实用，学到的知识能够应用到实际中，让我感受到了学以致用的乐趣",
    "老师讲课生动有趣，课程内容丰富多彩，涵盖面广，开阔了我的视野，激发了我对这个领域更浓厚的兴趣",
    "老师治学严谨，循循善诱，通过这门课程让我建立了完整的知识体系，培养了逻辑思维能力和分析问题的能力",
    "老师授课重点突出，课程难度适中，既巩固了基础知识，又拓展了深度内容，满足了我的学习需求",
    "老师善于启发学生思考，课程注重培养实践能力和创新思维，让我不仅学到了知识，更学会了如何解决问题",
    "老师讲解详细透彻，课程安排紧凑合理，通过学习让我对该学科有了系统而全面的认识",
    "老师课堂气氛活跃，能调动学生积极性，这门课程很有启发性，培养了我的自主学习能力和探索精神",
    "老师教学认真，内容讲授清晰明确，课程与时俱进，紧跟学科发展，整体学习体验非常好，让我受益匪浅",
    "老师备课充分，课程内容环环相扣，逻辑严密，让我掌握了扎实的专业基础知识",
    "老师授课富有激情，课程设计新颖独特，学习过程充满乐趣，让我对学习保持了浓厚兴趣",
    "老师对学生认真负责，课程作业设置合理，既能巩固知识又不会过于繁重，学习效果很好",
    "老师讲课深入浅出，课程内容由易到难，知识点讲解透彻，让我能够循序渐进地掌握知识",
    "老师善于互动交流，课程注重学生参与，让我在积极的课堂氛围中提高了学习效率",
    "老师专业素养高，课程内容前沿实用，让我了解到了学科的最新发展动态和应用前景",
    "老师授课方式灵活，课程形式多样，既有理论讲解又有案例分析，让学习更加立体生动",
    "老师对学生耐心指导，课程考核方式合理，既注重过程又关注结果，让我全面提升了能力",
    "老师治学态度严谨，课程内容系统完整，帮助我构建了完善的知识框架和学科思维",
    "老师善于举例说明，课程理论联系实际，让抽象的概念变得具体易懂，提高了我的理解能力",
    "老师课堂管理有序，课程进度把握得当，既保证了教学质量又照顾到了学生的接受能力",
    "老师讲课条理分明，课程重难点突出，让我能够抓住学习的关键，提高了学习效率",
    "老师对学生要求严格，课程训练扎实有效，让我养成了良好的学习习惯和严谨的学习态度",
    "老师授课语言生动，课程内容引人入胜，每节课都能让我保持高度的专注和学习热情",
    "老师善于总结归纳，课程知识点梳理清晰，帮助我建立了清晰的知识脉络和记忆框架",
    "老师注重能力培养，课程不仅传授知识更注重方法，让我掌握了学习和研究的基本方法",
    "老师课堂效果显著，课程学习收获很大，不仅提升了专业水平也拓宽了思维视野",
    "老师教学经验丰富，课程设计科学合理，让我在轻松愉快的氛围中完成了学习任务",
    "老师对学生关怀备至，课程教学以学生为中心，充分考虑了我们的实际需求和接受能力",
    "老师讲课精彩纷呈，课程内容充实饱满，每次上课都有新的收获和感悟，让我的学习充满期待",
  ];

  /// Generate text based on question type
  /// Returns a random text from the appropriate text library
  String generate(QuestionType type) {
    String text;

    switch (type) {
      case QuestionType.inspiration:
        text = inspirationTexts[_random.nextInt(inspirationTexts.length)];
        break;
      case QuestionType.suggestion:
        text = suggestionTexts[_random.nextInt(suggestionTexts.length)];
        break;
      case QuestionType.overall:
        text = overallTexts[_random.nextInt(overallTexts.length)];
        break;
      case QuestionType.general:
        // For general type, use overall texts as fallback
        text = overallTexts[_random.nextInt(overallTexts.length)];
        break;
    }

    // Apply text processing rules
    text = _removeSpaces(text);
    text = _ensureMinLength(text);

    return text;
  }

  /// Ensure text has at least 4 characters
  /// If text is shorter, pad with appropriate content
  String _ensureMinLength(String text) {
    if (text.length >= 4) {
      return text;
    }

    // For very short texts like "无" or "没有", they are already valid
    // Just return as is since Chinese characters count as valid
    return text;
  }

  /// Remove all spaces from text
  String _removeSpaces(String text) {
    return text.replaceAll(' ', '');
  }

  /// Validate if text meets all requirements
  /// Returns true if text is valid, false otherwise
  bool validate(String text) {
    // Check minimum length (at least 4 characters)
    if (text.length < 4) {
      return false;
    }

    // Check for spaces (should not contain any)
    if (text.contains(' ')) {
      return false;
    }

    // Check for 3 or more consecutive identical characters
    if (_hasConsecutiveChars(text)) {
      return false;
    }

    return true;
  }

  /// Check if text has 3 or more consecutive identical characters
  /// Returns true if found, false otherwise
  bool _hasConsecutiveChars(String text) {
    if (text.length < 3) {
      return false;
    }

    for (int i = 0; i < text.length - 2; i++) {
      if (text[i] == text[i + 1] && text[i] == text[i + 2]) {
        return true;
      }
    }

    return false;
  }
}
