import { db } from "./db";
import { curricula, grades, subjects, lessons, assessments, courseSections, lessonResources, discussionForums, badgeDefinitions, libraryItems, attendanceSessions, attendanceRecords, parentChildren, userProfiles } from "@shared/schema";
import { users } from "@shared/schema";
import { sql, eq } from "drizzle-orm";
import bcrypt from "bcryptjs";

async function seedAdminUser() {
  const adminEmail = "admin@madares.online";
  const [existingAdmin] = await db.select().from(users).where(eq(users.email, adminEmail));
  if (existingAdmin) {
    const [existingProfile] = await db.select().from(userProfiles).where(eq(userProfiles.userId, existingAdmin.id));
    if (!existingProfile) {
      await db.insert(userProfiles).values({
        userId: existingAdmin.id,
        role: "admin",
        preferredLanguage: "ar",
      });
      console.log("Admin profile created for existing admin user");
    }
    console.log("Admin user already exists");
    return;
  }

  const hashedPassword = await bcrypt.hash("Admin@123456", 10);
  const [adminUser] = await db.insert(users).values({
    email: adminEmail,
    password: hashedPassword,
    firstName: "مدير",
    lastName: "النظام",
    authProvider: "email",
    emailVerified: true,
  }).returning();

  await db.insert(userProfiles).values({
    userId: adminUser.id,
    role: "admin",
    preferredLanguage: "ar",
  });

  console.log("Admin user created: admin@madares.online / Admin@123456");
}

export async function seedDatabase() {
  await seedAdminUser();

  const existingCurricula = await db.select().from(curricula);
  if (existingCurricula.length > 0) {
    console.log("Core data already seeded, checking new features...");
    const existingForumsCheck = await db.select().from(discussionForums);
    if (existingForumsCheck.length === 0) {
      const allSubjects = await db.select().from(subjects);
      const mathSubjectSeed = allSubjects.find(s => s.nameAr?.includes("رياضيات"));
      const arabicSubjectSeed = allSubjects.find(s => s.nameAr?.includes("عربية"));
      if (mathSubjectSeed && arabicSubjectSeed) {
        await db.insert(discussionForums).values([
          { titleAr: "المنتدى العام", titleEn: "General Forum", descriptionAr: "مناقشات عامة حول التعليم والتعلم", descriptionEn: "General discussions about education and learning", isGeneral: true },
          { subjectId: mathSubjectSeed.id, titleAr: "منتدى الرياضيات", titleEn: "Mathematics Forum", descriptionAr: "أسئلة ومناقشات حول مادة الرياضيات", descriptionEn: "Questions and discussions about mathematics", isGeneral: false },
          { subjectId: arabicSubjectSeed.id, titleAr: "منتدى اللغة العربية", titleEn: "Arabic Language Forum", descriptionAr: "أسئلة ومناقشات حول مادة اللغة العربية", descriptionEn: "Questions and discussions about Arabic language", isGeneral: false },
        ]);
        console.log("Forums seeded");
      }
    }
    const existingBadgesCheck = await db.select().from(badgeDefinitions);
    if (existingBadgesCheck.length === 0) {
      await db.insert(badgeDefinitions).values([
        { nameAr: "الدرس الأول", nameEn: "First Lesson", descriptionAr: "أكمل أول درس لك", descriptionEn: "Complete your first lesson", iconName: "BookOpen", color: "#22c55e", criteria: "complete_1_lesson", threshold: 1 },
        { nameAr: "متعلم نشط", nameEn: "Active Learner", descriptionAr: "أكمل 5 دروس", descriptionEn: "Complete 5 lessons", iconName: "GraduationCap", color: "#3b82f6", criteria: "complete_5_lessons", threshold: 5 },
        { nameAr: "خبير الاختبارات", nameEn: "Quiz Master", descriptionAr: "احصل على 90% أو أعلى في اختبار", descriptionEn: "Score 90% or higher on an assessment", iconName: "Award", color: "#f59e0b", criteria: "score_90_assessment", threshold: 1 },
        { nameAr: "مشارك فعال", nameEn: "Active Participant", descriptionAr: "اكتب أول مشاركة في المنتدى", descriptionEn: "Write your first forum post", iconName: "MessageSquare", color: "#8b5cf6", criteria: "first_post", threshold: 1 },
        { nameAr: "قارئ نهم", nameEn: "Bookworm", descriptionAr: "حمّل 5 موارد من المكتبة", descriptionEn: "Download 5 library resources", iconName: "BookMarked", color: "#ec4899", criteria: "download_5_resources", threshold: 5 },
        { nameAr: "إجابة مفيدة", nameEn: "Helpful Answer", descriptionAr: "اكتب 10 ردود في المنتدى", descriptionEn: "Write 10 forum replies", iconName: "HelpCircle", color: "#14b8a6", criteria: "write_10_replies", threshold: 10 },
        { nameAr: "نجم التعلم", nameEn: "Learning Star", descriptionAr: "اجمع 500 نقطة", descriptionEn: "Earn 500 points", iconName: "Star", color: "#eab308", criteria: "earn_500_points", threshold: 500 },
        { nameAr: "المثابر", nameEn: "Persistent", descriptionAr: "أكمل 10 دروس", descriptionEn: "Complete 10 lessons", iconName: "Flame", color: "#ef4444", criteria: "complete_10_lessons", threshold: 10 },
      ]);
      console.log("Badges seeded");
    }
    const existingAttendanceCheck = await db.select().from(attendanceSessions);
    if (existingAttendanceCheck.length === 0) {
      const allSubjectsAtt = await db.select().from(subjects);
      const allUsersAtt = await db.select().from(users);
      if (allSubjectsAtt.length > 0 && allUsersAtt.length > 0) {
        const firstSubject = allSubjectsAtt[0];
        const firstUser = allUsersAtt[0];
        const [session1] = await db.insert(attendanceSessions).values({
          subjectId: firstSubject.id,
          teacherId: firstUser.id,
          sessionDate: new Date(),
          titleAr: "حصة الحضور الأولى",
          titleEn: "First Attendance Session",
          notes: "جلسة تجريبية",
        }).returning();
        const [session2] = await db.insert(attendanceSessions).values({
          subjectId: firstSubject.id,
          teacherId: firstUser.id,
          sessionDate: new Date(Date.now() - 86400000),
          titleAr: "حصة الحضور الثانية",
          titleEn: "Second Attendance Session",
        }).returning();
        const [session3] = await db.insert(attendanceSessions).values({
          subjectId: firstSubject.id,
          teacherId: firstUser.id,
          sessionDate: new Date(Date.now() - 172800000),
          titleAr: "حصة الحضور الثالثة",
          titleEn: "Third Attendance Session",
        }).returning();
        if (allUsersAtt.length > 0) {
          await db.insert(attendanceRecords).values([
            { sessionId: session1.id, studentId: firstUser.id, status: "present" },
            { sessionId: session2.id, studentId: firstUser.id, status: "absent", notes: "غياب بعذر" },
            { sessionId: session3.id, studentId: firstUser.id, status: "late" },
          ]);
        }
        console.log("Attendance sessions seeded");
      }
    }

    const existingParentChildCheck = await db.select().from(parentChildren);
    if (existingParentChildCheck.length === 0) {
      const allUsersPC = await db.select().from(users);
      if (allUsersPC.length > 0) {
        const [parent1] = await db.insert(users).values({
          email: "parent1@madares.test",
          firstName: "أحمد",
          lastName: "الأب",
          authProvider: "email",
        }).returning();
        const [parent2] = await db.insert(users).values({
          email: "parent2@madares.test",
          firstName: "فاطمة",
          lastName: "الأم",
          authProvider: "email",
        }).returning();
        const childUser = allUsersPC[0];
        await db.insert(parentChildren).values([
          { parentId: parent1.id, childId: childUser.id },
          { parentId: parent2.id, childId: childUser.id },
        ]);
        console.log("Parent-child relationships seeded");
      }
    }

    const existingLibraryCheck = await db.select().from(libraryItems);
    if (existingLibraryCheck.length === 0) {
      await db.insert(libraryItems).values([
        { titleAr: "أساسيات الرياضيات للمبتدئين", titleEn: "Mathematics Basics for Beginners", descriptionAr: "كتاب شامل يغطي أساسيات الرياضيات للمرحلة الابتدائية", descriptionEn: "A comprehensive book covering math basics for primary school", category: "book", fileUrl: "#", authorAr: "د. أحمد محمد", authorEn: "Dr. Ahmad Muhammad", isPublic: true },
        { titleAr: "قواعد اللغة العربية المبسطة", titleEn: "Simplified Arabic Grammar Rules", descriptionAr: "مرجع مبسط لقواعد اللغة العربية", descriptionEn: "A simplified reference for Arabic grammar rules", category: "book", fileUrl: "#", authorAr: "أ. فاطمة علي", authorEn: "Ms. Fatima Ali", isPublic: true },
        { titleAr: "كيف تذاكر بفعالية", titleEn: "How to Study Effectively", descriptionAr: "مقال يشرح أفضل طرق المذاكرة والتحصيل الدراسي", descriptionEn: "An article explaining the best study methods", category: "article", fileUrl: "#", authorAr: "د. سارة خالد", authorEn: "Dr. Sara Khaled", isPublic: true },
        { titleAr: "استراتيجيات حل المسائل الرياضية", titleEn: "Math Problem Solving Strategies", descriptionAr: "مقال متخصص في استراتيجيات حل المسائل", descriptionEn: "Specialized article on problem-solving strategies", category: "article", fileUrl: "#", authorAr: "أ. محمد حسن", authorEn: "Mr. Muhammad Hassan", isPublic: true },
        { titleAr: "مقدمة في العلوم الطبيعية", titleEn: "Introduction to Natural Sciences", descriptionAr: "فيديو تعليمي عن أساسيات العلوم الطبيعية", descriptionEn: "Educational video about natural sciences basics", category: "video", fileUrl: "#", authorAr: "قناة العلوم", authorEn: "Science Channel", isPublic: true },
        { titleAr: "تعلم الإنجليزية - المستوى الأول", titleEn: "Learn English - Level 1", descriptionAr: "فيديو تعليمي لتعلم أساسيات اللغة الإنجليزية", descriptionEn: "Educational video for learning English basics", category: "video", fileUrl: "#", authorAr: "أكاديمية اللغات", authorEn: "Language Academy", isPublic: true },
        { titleAr: "دليل المعلم - الرياضيات", titleEn: "Teacher Guide - Mathematics", descriptionAr: "دليل المعلم لمادة الرياضيات للمرحلة الابتدائية", descriptionEn: "Teacher guide for primary school mathematics", category: "document", fileUrl: "#", authorAr: "وزارة التعليم", authorEn: "Ministry of Education", isPublic: true },
        { titleAr: "ورقة عمل - الأعداد والعمليات", titleEn: "Worksheet - Numbers and Operations", descriptionAr: "أوراق عمل تفاعلية للتدريب على الأعداد والعمليات الحسابية", descriptionEn: "Interactive worksheets for practicing numbers and operations", category: "document", fileUrl: "#", authorAr: "فريق المناهج", authorEn: "Curriculum Team", isPublic: true },
        { titleAr: "قصص تعليمية للأطفال", titleEn: "Educational Stories for Children", descriptionAr: "مجموعة قصص تعليمية ممتعة للأطفال", descriptionEn: "A collection of fun educational stories for children", category: "book", fileUrl: "#", authorAr: "دار النشر التعليمية", authorEn: "Educational Publishing House", isPublic: true },
        { titleAr: "التجارب العلمية المنزلية", titleEn: "Home Science Experiments", descriptionAr: "فيديو يشرح تجارب علمية بسيطة يمكن إجراؤها في المنزل", descriptionEn: "Video explaining simple science experiments you can do at home", category: "video", fileUrl: "#", authorAr: "مختبر العلوم", authorEn: "Science Lab", isPublic: true },
      ]);
      console.log("Library items seeded");
    }
    return;
  }

  console.log("Seeding database...");

  const [saudiCurriculum] = await db.insert(curricula).values({
    nameAr: "المنهج السعودي",
    nameEn: "Saudi Curriculum",
    descriptionAr: "المنهج الوطني السعودي وفق معايير وزارة التعليم في المملكة العربية السعودية",
    descriptionEn: "Saudi National Curriculum",
    country: "saudi",
    isActive: true,
  }).returning();

  const [egyptianCurriculum] = await db.insert(curricula).values({
    nameAr: "المنهج المصري",
    nameEn: "Egyptian Curriculum",
    descriptionAr: "المنهج الوطني المصري وفق معايير وزارة التربية والتعليم المصرية",
    descriptionEn: "Egyptian National Curriculum",
    country: "egyptian",
    isActive: true,
  }).returning();

  const [syrianCurriculum] = await db.insert(curricula).values({
    nameAr: "المنهج السوري",
    nameEn: "Syrian Curriculum",
    descriptionAr: "المنهج التعليمي السوري المعتمد",
    descriptionEn: "Syrian Curriculum",
    country: "syrian",
    isActive: true,
  }).returning();

  const [customCurriculum] = await db.insert(curricula).values({
    nameAr: "المنهج الخاص",
    nameEn: "Custom Curriculum",
    descriptionAr: "مناهج مخصصة ومتقدمة تشمل مهارات إضافية وبرامج تعليمية حديثة",
    descriptionEn: "Custom Advanced Curriculum",
    country: "custom",
    isActive: true,
  }).returning();

  const [grade1] = await db.insert(grades).values({
    curriculumId: saudiCurriculum.id,
    nameAr: "الصف الأول الابتدائي",
    nameEn: "Grade 1",
    orderIndex: 1,
  }).returning();

  const [grade2] = await db.insert(grades).values({
    curriculumId: saudiCurriculum.id,
    nameAr: "الصف الثاني الابتدائي",
    nameEn: "Grade 2",
    orderIndex: 2,
  }).returning();

  const [grade3] = await db.insert(grades).values({
    curriculumId: saudiCurriculum.id,
    nameAr: "الصف الثالث الابتدائي",
    nameEn: "Grade 3",
    orderIndex: 3,
  }).returning();

  const [egGrade1] = await db.insert(grades).values({
    curriculumId: egyptianCurriculum.id,
    nameAr: "الصف الأول الابتدائي",
    nameEn: "Grade 1",
    orderIndex: 1,
  }).returning();

  const [syGrade1] = await db.insert(grades).values({
    curriculumId: syrianCurriculum.id,
    nameAr: "الصف الأول الأساسي",
    nameEn: "Grade 1",
    orderIndex: 1,
  }).returning();

  const [customGrade1] = await db.insert(grades).values({
    curriculumId: customCurriculum.id,
    nameAr: "المستوى التمهيدي",
    nameEn: "Introductory Level",
    orderIndex: 1,
  }).returning();

  const [mathSubject] = await db.insert(subjects).values({
    gradeId: grade1.id,
    nameAr: "الرياضيات",
    nameEn: "Mathematics",
    descriptionAr: "الأعداد والعمليات الحسابية الأساسية",
    iconName: "math",
    color: "#22c55e",
    orderIndex: 1,
  }).returning();

  const [arabicSubject] = await db.insert(subjects).values({
    gradeId: grade1.id,
    nameAr: "اللغة العربية",
    nameEn: "Arabic Language",
    descriptionAr: "القراءة والكتابة والتعبير",
    iconName: "arabic",
    color: "#10b981",
    orderIndex: 2,
  }).returning();

  const [scienceSubject] = await db.insert(subjects).values({
    gradeId: grade1.id,
    nameAr: "العلوم",
    nameEn: "Science",
    descriptionAr: "استكشاف العالم من حولنا",
    iconName: "science",
    color: "#f59e0b",
    orderIndex: 3,
  }).returning();

  await db.insert(subjects).values({
    gradeId: grade1.id,
    nameAr: "اللغة الإنجليزية",
    nameEn: "English Language",
    descriptionAr: "أساسيات اللغة الإنجليزية",
    iconName: "english",
    color: "#8b5cf6",
    orderIndex: 4,
  });

  await db.insert(subjects).values([
    { gradeId: grade2.id, nameAr: "الرياضيات", iconName: "math", color: "#22c55e", orderIndex: 1 },
    { gradeId: grade2.id, nameAr: "اللغة العربية", iconName: "arabic", color: "#10b981", orderIndex: 2 },
    { gradeId: grade2.id, nameAr: "العلوم", iconName: "science", color: "#f59e0b", orderIndex: 3 },
  ]);

  await db.insert(subjects).values([
    { gradeId: egGrade1.id, nameAr: "الرياضيات", iconName: "math", color: "#22c55e", orderIndex: 1 },
    { gradeId: egGrade1.id, nameAr: "اللغة العربية", iconName: "arabic", color: "#10b981", orderIndex: 2 },
  ]);

  await db.insert(subjects).values([
    { gradeId: syGrade1.id, nameAr: "الرياضيات", iconName: "math", color: "#22c55e", orderIndex: 1 },
    { gradeId: syGrade1.id, nameAr: "اللغة العربية", iconName: "arabic", color: "#10b981", orderIndex: 2 },
  ]);

  await db.insert(subjects).values([
    { gradeId: customGrade1.id, nameAr: "البرمجة", iconName: "computer", color: "#6366f1", orderIndex: 1 },
    { gradeId: customGrade1.id, nameAr: "التفكير الناقد", iconName: "science", color: "#ec4899", orderIndex: 2 },
  ]);

  const [mathSection1] = await db.insert(courseSections).values({
    subjectId: mathSubject.id,
    nameAr: "الوحدة الأولى: الأعداد",
    nameEn: "Unit 1: Numbers",
    descriptionAr: "تعلم الأعداد والعد والترتيب",
    orderIndex: 1,
    isMandatory: true,
  }).returning();

  const [mathSection2] = await db.insert(courseSections).values({
    subjectId: mathSubject.id,
    nameAr: "الوحدة الثانية: العمليات الحسابية",
    nameEn: "Unit 2: Arithmetic Operations",
    descriptionAr: "تعلم الجمع والطرح",
    orderIndex: 2,
    isMandatory: true,
  }).returning();

  const [arabicSection1] = await db.insert(courseSections).values({
    subjectId: arabicSubject.id,
    nameAr: "الوحدة الأولى: الحروف الهجائية",
    nameEn: "Unit 1: Arabic Alphabet",
    descriptionAr: "تعلم الحروف العربية وطريقة كتابتها",
    orderIndex: 1,
    isMandatory: true,
  }).returning();

  const [mathLesson1] = await db.insert(lessons).values({
    subjectId: mathSubject.id,
    sectionId: mathSection1.id,
    nameAr: "الأعداد من 1 إلى 10",
    nameEn: "Numbers 1 to 10",
    descriptionAr: "تعلم الأعداد من واحد إلى عشرة والتعرف عليها",
    contentAr: "في هذا الدرس سنتعلم الأعداد من 1 إلى 10.\n\nالأعداد هي رموز نستخدمها للعد والقياس. دعونا نتعرف على كل عدد:\n\n1 - واحد: هو أول عدد في سلسلة الأعداد الطبيعية\n2 - اثنان: يأتي بعد الواحد مباشرة\n3 - ثلاثة: ويساوي 1 + 2\n4 - أربعة: ويساوي 2 + 2\n5 - خمسة: وهو نصف العشرة\n6 - ستة: ويساوي 3 + 3\n7 - سبعة: ويساوي 3 + 4\n8 - ثمانية: ويساوي 4 + 4\n9 - تسعة: ويساوي 10 - 1\n10 - عشرة: وهو أول عدد من خانتين\n\nتذكر أن تتدرب على كتابة هذه الأعداد وقراءتها بصوت عالٍ!",
    lessonType: "reading",
    durationMinutes: 15,
    orderIndex: 1,
    isPublished: true,
    isMandatory: true,
    isFree: true,
    learningOutcomes: ["التعرف على الأعداد من 1 إلى 10", "كتابة الأعداد بشكل صحيح", "ترتيب الأعداد تصاعدياً وتنازلياً"],
  }).returning();

  const [mathLesson2] = await db.insert(lessons).values({
    subjectId: mathSubject.id,
    sectionId: mathSection2.id,
    nameAr: "الجمع حتى العدد 10",
    nameEn: "Addition up to 10",
    descriptionAr: "تعلم عملية الجمع للأعداد التي مجموعها لا يتجاوز 10",
    contentAr: "عملية الجمع هي أول العمليات الحسابية التي نتعلمها.\n\nالجمع يعني ضم مجموعتين أو أكثر معاً لنحصل على المجموع.\n\nأمثلة:\n2 + 3 = 5\n4 + 1 = 5\n3 + 3 = 6\n5 + 5 = 10\n\nقاعدة مهمة: عندما نجمع أي عدد مع صفر، يبقى العدد كما هو.\nمثال: 7 + 0 = 7\n\nقاعدة أخرى: ترتيب الأعداد في الجمع لا يغير النتيجة.\nمثال: 3 + 4 = 4 + 3 = 7",
    videoUrl: "https://www.youtube.com/watch?v=pTnEPKA5ey4",
    videoDurationSeconds: 300,
    lessonType: "video",
    durationMinutes: 20,
    orderIndex: 2,
    isPublished: true,
    isMandatory: true,
    prerequisiteLessonId: mathLesson1.id,
    learningOutcomes: ["فهم مفهوم عملية الجمع", "جمع أعداد لا يتجاوز مجموعها 10", "تطبيق خاصية التبديل في الجمع"],
  }).returning();

  const [mathLesson3] = await db.insert(lessons).values({
    subjectId: mathSubject.id,
    sectionId: mathSection2.id,
    nameAr: "الطرح حتى العدد 10",
    nameEn: "Subtraction up to 10",
    descriptionAr: "تعلم عملية الطرح للأعداد حتى 10",
    contentAr: "عملية الطرح هي عكس عملية الجمع.\n\nالطرح يعني إزالة جزء من مجموعة.\n\nأمثلة:\n5 - 2 = 3\n8 - 3 = 5\n10 - 4 = 6\n7 - 7 = 0\n\nقاعدة مهمة: عندما نطرح صفراً من أي عدد، يبقى العدد كما هو.\nمثال: 9 - 0 = 9\n\nقاعدة أخرى: عندما نطرح عدداً من نفسه، نحصل على صفر.\nمثال: 6 - 6 = 0",
    lessonType: "reading",
    durationMinutes: 20,
    orderIndex: 3,
    isPublished: true,
    isMandatory: true,
    prerequisiteLessonId: mathLesson2.id,
    learningOutcomes: ["فهم مفهوم عملية الطرح", "طرح أعداد ضمن نطاق 10", "العلاقة بين الجمع والطرح"],
  }).returning();

  const [arabicLesson1] = await db.insert(lessons).values({
    subjectId: arabicSubject.id,
    sectionId: arabicSection1.id,
    nameAr: "حروف الهجاء - المجموعة الأولى",
    nameEn: "Arabic Alphabet - Group 1",
    descriptionAr: "تعلم الحروف الأبجدية العربية: أ، ب، ت، ث",
    contentAr: "الحروف العربية 28 حرفاً. سنتعلم اليوم أول أربعة حروف:\n\nألف (أ): أول حرف في الأبجدية، وهو حرف مد\nباء (ب): ينطق بضم الشفتين، نقطة واحدة من الأسفل\nتاء (ت): تشبه الباء لكن بنقطتين من الأعلى\nثاء (ث): تشبه الباء والتاء لكن بثلاث نقاط من الأعلى\n\nتمرين: حاول كتابة كل حرف عدة مرات في دفترك.",
    lessonType: "reading",
    durationMinutes: 15,
    orderIndex: 1,
    isPublished: true,
    isMandatory: true,
    isFree: true,
    learningOutcomes: ["التعرف على الحروف أ، ب، ت، ث", "كتابة الحروف بشكل صحيح", "نطق الحروف بشكل سليم"],
  }).returning();

  await db.insert(lessons).values({
    subjectId: arabicSubject.id,
    sectionId: arabicSection1.id,
    nameAr: "حروف الهجاء - المجموعة الثانية",
    nameEn: "Arabic Alphabet - Group 2",
    descriptionAr: "تعلم الحروف: ج، ح، خ، د",
    contentAr: "اليوم نتعلم أربعة حروف جديدة:\n\nجيم (ج): حرف ينطق من وسط اللسان\nحاء (ح): حرف ينطق من الحلق\nخاء (خ): تشبه الحاء لكن مع نقطة\nدال (د): حرف ينطق من طرف اللسان\n\nتذكر أن الممارسة المستمرة هي مفتاح النجاح!",
    lessonType: "reading",
    durationMinutes: 15,
    orderIndex: 2,
    isPublished: true,
    isMandatory: true,
    prerequisiteLessonId: arabicLesson1.id,
    learningOutcomes: ["التعرف على الحروف ج، ح، خ، د", "التمييز بين الحروف المتشابهة"],
  });

  await db.insert(lessons).values({
    subjectId: scienceSubject.id,
    nameAr: "الكائنات الحية وغير الحية",
    nameEn: "Living and Non-Living Things",
    descriptionAr: "التمييز بين الكائنات الحية وغير الحية",
    contentAr: "العالم من حولنا مليء بالأشياء. بعضها حي وبعضها غير حي.\n\nالكائنات الحية:\n- تتنفس\n- تتغذى\n- تنمو\n- تتكاثر\n\nأمثلة: الإنسان، الحيوانات، النباتات\n\nالأشياء غير الحية:\n- لا تتنفس\n- لا تتغذى\n- لا تنمو\n\nأمثلة: الحجر، الماء، الهواء",
    videoUrl: "https://www.youtube.com/watch?v=VGosi1wt09U",
    videoDurationSeconds: 420,
    lessonType: "video",
    durationMinutes: 15,
    orderIndex: 1,
    isPublished: true,
    isMandatory: true,
    isFree: true,
    learningOutcomes: ["التمييز بين الحي وغير الحي", "ذكر خصائص الكائنات الحية"],
  });

  await db.insert(lessonResources).values([
    {
      lessonId: mathLesson1.id,
      nameAr: "ورقة عمل - الأعداد من 1 إلى 10",
      nameEn: "Worksheet - Numbers 1 to 10",
      fileUrl: "#",
      fileType: "pdf",
      fileSizeKb: 245,
      orderIndex: 1,
    },
    {
      lessonId: mathLesson1.id,
      nameAr: "بطاقات الأعداد للطباعة",
      nameEn: "Printable Number Cards",
      fileUrl: "#",
      fileType: "pdf",
      fileSizeKb: 180,
      orderIndex: 2,
    },
    {
      lessonId: mathLesson2.id,
      nameAr: "تمارين إضافية - الجمع",
      nameEn: "Extra Exercises - Addition",
      fileUrl: "#",
      fileType: "pdf",
      fileSizeKb: 320,
      orderIndex: 1,
    },
  ]);

  await db.insert(assessments).values({
    lessonId: mathLesson1.id,
    nameAr: "اختبار الأعداد من 1 إلى 10",
    nameEn: "Numbers 1 to 10 Quiz",
    assessmentType: "quiz",
    passingScore: 60,
    timeLimitMinutes: 10,
    orderIndex: 1,
    questions: [
      { question: "ما العدد الذي يأتي بعد 5؟", options: ["4", "6", "7", "3"], correctAnswer: "6" },
      { question: "ما العدد الذي يأتي قبل 8؟", options: ["9", "6", "7", "5"], correctAnswer: "7" },
      { question: "رتب الأعداد تصاعدياً: 3، 1، 5، 2", options: ["5، 3، 2، 1", "1، 2، 3، 5", "2، 1، 3، 5", "1، 3، 2، 5"], correctAnswer: "1، 2، 3، 5" },
      { question: "أي عدد هو الأكبر؟", options: ["3", "7", "5", "2"], correctAnswer: "7" },
    ],
  });

  await db.insert(assessments).values({
    lessonId: mathLesson2.id,
    nameAr: "تمرين الجمع",
    nameEn: "Addition Exercise",
    assessmentType: "exercise",
    passingScore: 60,
    orderIndex: 1,
    questions: [
      { question: "ما ناتج 3 + 4؟", options: ["5", "6", "7", "8"], correctAnswer: "7" },
      { question: "ما ناتج 5 + 5؟", options: ["8", "9", "10", "11"], correctAnswer: "10" },
      { question: "ما ناتج 2 + 6؟", options: ["7", "8", "9", "6"], correctAnswer: "8" },
    ],
  });

  await db.insert(assessments).values({
    lessonId: arabicLesson1.id,
    nameAr: "اختبار الحروف - المجموعة الأولى",
    nameEn: "Alphabet Quiz - Group 1",
    assessmentType: "quiz",
    passingScore: 60,
    timeLimitMinutes: 5,
    orderIndex: 1,
    questions: [
      { question: "كم عدد الحروف العربية؟", options: ["24", "26", "28", "30"], correctAnswer: "28" },
      { question: "ما أول حرف في الأبجدية العربية؟", options: ["باء", "ألف", "تاء", "ثاء"], correctAnswer: "ألف" },
      { question: "كم نقطة في حرف الثاء؟", options: ["1", "2", "3", "0"], correctAnswer: "3" },
    ],
  });

  const existingForums = await db.select().from(discussionForums);
  if (existingForums.length === 0) {
    await db.insert(discussionForums).values([
      {
        titleAr: "المنتدى العام",
        titleEn: "General Forum",
        descriptionAr: "مناقشات عامة حول التعليم والتعلم",
        descriptionEn: "General discussions about education and learning",
        isGeneral: true,
      },
      {
        subjectId: mathSubject.id,
        titleAr: "منتدى الرياضيات",
        titleEn: "Mathematics Forum",
        descriptionAr: "أسئلة ومناقشات حول مادة الرياضيات",
        descriptionEn: "Questions and discussions about mathematics",
        isGeneral: false,
      },
      {
        subjectId: arabicSubject.id,
        titleAr: "منتدى اللغة العربية",
        titleEn: "Arabic Language Forum",
        descriptionAr: "أسئلة ومناقشات حول مادة اللغة العربية",
        descriptionEn: "Questions and discussions about Arabic language",
        isGeneral: false,
      },
    ]);
  }

  const existingBadges = await db.select().from(badgeDefinitions);
  if (existingBadges.length === 0) {
    await db.insert(badgeDefinitions).values([
      {
        nameAr: "الدرس الأول",
        nameEn: "First Lesson",
        descriptionAr: "أكمل أول درس لك",
        descriptionEn: "Complete your first lesson",
        iconName: "BookOpen",
        color: "#22c55e",
        criteria: "complete_1_lesson",
        threshold: 1,
      },
      {
        nameAr: "متعلم نشط",
        nameEn: "Active Learner",
        descriptionAr: "أكمل 5 دروس",
        descriptionEn: "Complete 5 lessons",
        iconName: "GraduationCap",
        color: "#3b82f6",
        criteria: "complete_5_lessons",
        threshold: 5,
      },
      {
        nameAr: "خبير الاختبارات",
        nameEn: "Quiz Master",
        descriptionAr: "احصل على 90% أو أعلى في اختبار",
        descriptionEn: "Score 90% or higher on an assessment",
        iconName: "Award",
        color: "#f59e0b",
        criteria: "score_90_assessment",
        threshold: 1,
      },
      {
        nameAr: "مشارك فعال",
        nameEn: "Active Participant",
        descriptionAr: "اكتب أول مشاركة في المنتدى",
        descriptionEn: "Write your first forum post",
        iconName: "MessageSquare",
        color: "#8b5cf6",
        criteria: "first_post",
        threshold: 1,
      },
      {
        nameAr: "قارئ نهم",
        nameEn: "Bookworm",
        descriptionAr: "حمّل 5 موارد من المكتبة",
        descriptionEn: "Download 5 library resources",
        iconName: "BookMarked",
        color: "#ec4899",
        criteria: "download_5_resources",
        threshold: 5,
      },
      {
        nameAr: "إجابة مفيدة",
        nameEn: "Helpful Answer",
        descriptionAr: "اكتب 10 ردود في المنتدى",
        descriptionEn: "Write 10 forum replies",
        iconName: "HelpCircle",
        color: "#14b8a6",
        criteria: "write_10_replies",
        threshold: 10,
      },
      {
        nameAr: "نجم التعلم",
        nameEn: "Learning Star",
        descriptionAr: "اجمع 500 نقطة",
        descriptionEn: "Earn 500 points",
        iconName: "Star",
        color: "#eab308",
        criteria: "earn_500_points",
        threshold: 500,
      },
      {
        nameAr: "المثابر",
        nameEn: "Persistent",
        descriptionAr: "أكمل 10 دروس",
        descriptionEn: "Complete 10 lessons",
        iconName: "Flame",
        color: "#ef4444",
        criteria: "complete_10_lessons",
        threshold: 10,
      },
    ]);
  }

  const existingLibrary = await db.select().from(libraryItems);
  if (existingLibrary.length === 0) {
    await db.insert(libraryItems).values([
      {
        titleAr: "أساسيات الرياضيات للمبتدئين",
        titleEn: "Mathematics Basics for Beginners",
        descriptionAr: "كتاب شامل يغطي أساسيات الرياضيات للمرحلة الابتدائية",
        descriptionEn: "A comprehensive book covering math basics for primary school",
        category: "book",
        fileUrl: "#",
        authorAr: "د. أحمد محمد",
        authorEn: "Dr. Ahmad Muhammad",
        isPublic: true,
      },
      {
        titleAr: "قواعد اللغة العربية المبسطة",
        titleEn: "Simplified Arabic Grammar Rules",
        descriptionAr: "مرجع مبسط لقواعد اللغة العربية",
        descriptionEn: "A simplified reference for Arabic grammar rules",
        category: "book",
        fileUrl: "#",
        authorAr: "أ. فاطمة علي",
        authorEn: "Ms. Fatima Ali",
        isPublic: true,
      },
      {
        titleAr: "كيف تذاكر بفعالية",
        titleEn: "How to Study Effectively",
        descriptionAr: "مقال يشرح أفضل طرق المذاكرة والتحصيل الدراسي",
        descriptionEn: "An article explaining the best study and learning methods",
        category: "article",
        fileUrl: "#",
        authorAr: "د. سارة خالد",
        authorEn: "Dr. Sara Khaled",
        isPublic: true,
      },
      {
        titleAr: "استراتيجيات حل المسائل الرياضية",
        titleEn: "Math Problem Solving Strategies",
        descriptionAr: "مقال متخصص في استراتيجيات حل المسائل",
        descriptionEn: "Specialized article on problem-solving strategies",
        category: "article",
        fileUrl: "#",
        authorAr: "أ. محمد حسن",
        authorEn: "Mr. Muhammad Hassan",
        isPublic: true,
      },
      {
        titleAr: "مقدمة في العلوم الطبيعية",
        titleEn: "Introduction to Natural Sciences",
        descriptionAr: "فيديو تعليمي عن أساسيات العلوم الطبيعية",
        descriptionEn: "Educational video about natural sciences basics",
        category: "video",
        fileUrl: "#",
        authorAr: "قناة العلوم",
        authorEn: "Science Channel",
        isPublic: true,
      },
      {
        titleAr: "تعلم الإنجليزية - المستوى الأول",
        titleEn: "Learn English - Level 1",
        descriptionAr: "فيديو تعليمي لتعلم أساسيات اللغة الإنجليزية",
        descriptionEn: "Educational video for learning English basics",
        category: "video",
        fileUrl: "#",
        authorAr: "أكاديمية اللغات",
        authorEn: "Language Academy",
        isPublic: true,
      },
      {
        titleAr: "دليل المعلم - الرياضيات",
        titleEn: "Teacher Guide - Mathematics",
        descriptionAr: "دليل المعلم لمادة الرياضيات للمرحلة الابتدائية",
        descriptionEn: "Teacher guide for primary school mathematics",
        category: "document",
        fileUrl: "#",
        authorAr: "وزارة التعليم",
        authorEn: "Ministry of Education",
        isPublic: true,
      },
      {
        titleAr: "ورقة عمل - الأعداد والعمليات",
        titleEn: "Worksheet - Numbers and Operations",
        descriptionAr: "أوراق عمل تفاعلية للتدريب على الأعداد والعمليات الحسابية",
        descriptionEn: "Interactive worksheets for practicing numbers and operations",
        category: "document",
        fileUrl: "#",
        authorAr: "فريق المناهج",
        authorEn: "Curriculum Team",
        isPublic: true,
      },
      {
        titleAr: "قصص تعليمية للأطفال",
        titleEn: "Educational Stories for Children",
        descriptionAr: "مجموعة قصص تعليمية ممتعة للأطفال",
        descriptionEn: "A collection of fun educational stories for children",
        category: "book",
        fileUrl: "#",
        authorAr: "دار النشر التعليمية",
        authorEn: "Educational Publishing House",
        isPublic: true,
      },
      {
        titleAr: "التجارب العلمية المنزلية",
        titleEn: "Home Science Experiments",
        descriptionAr: "فيديو يشرح تجارب علمية بسيطة يمكن إجراؤها في المنزل",
        descriptionEn: "Video explaining simple science experiments you can do at home",
        category: "video",
        fileUrl: "#",
        authorAr: "مختبر العلوم",
        authorEn: "Science Lab",
        isPublic: true,
      },
    ]);
  }

  console.log("Database seeded successfully!");
}
