require("dotenv").config();
const couchdbService = require("../services/couchdbService");

/**
 * Initial badge definitions
 * These badges will be auto-awarded when users meet the criteria
 */
const badges = [
  // Street Adoption Badges
  {
    name: "First Adoption",
    description: "Adopted your first street",
    icon: "🏡",
    criteria: {
      type: "street_adoptions",
      threshold: 1,
    },
    rarity: "common",
    order: 1,
  },
  {
    name: "Street Adopter",
    description: "Adopted 5 streets",
    icon: "🏘️",
    criteria: {
      type: "street_adoptions",
      threshold: 5,
    },
    rarity: "rare",
    order: 2,
  },
  {
    name: "Neighborhood Champion",
    description: "Adopted 10 streets",
    icon: "🌆",
    criteria: {
      type: "street_adoptions",
      threshold: 10,
    },
    rarity: "epic",
    order: 3,
  },
  {
    name: "City Guardian",
    description: "Adopted 25 streets",
    icon: "🏙️",
    criteria: {
      type: "street_adoptions",
      threshold: 25,
    },
    rarity: "legendary",
    order: 4,
  },

  // Task Completion Badges
  {
    name: "First Task",
    description: "Completed your first task",
    icon: "✅",
    criteria: {
      type: "task_completions",
      threshold: 1,
    },
    rarity: "common",
    order: 5,
  },
  {
    name: "Task Master",
    description: "Completed 10 tasks",
    icon: "🎯",
    criteria: {
      type: "task_completions",
      threshold: 10,
    },
    rarity: "rare",
    order: 6,
  },
  {
    name: "Dedicated Worker",
    description: "Completed 50 tasks",
    icon: "🛠️",
    criteria: {
      type: "task_completions",
      threshold: 50,
    },
    rarity: "epic",
    order: 7,
  },
  {
    name: "Maintenance Legend",
    description: "Completed 100 tasks",
    icon: "⚡",
    criteria: {
      type: "task_completions",
      threshold: 100,
    },
    rarity: "legendary",
    order: 8,
  },

  // Post Creation Badges
  {
    name: "First Post",
    description: "Created your first post",
    icon: "📝",
    criteria: {
      type: "post_creations",
      threshold: 1,
    },
    rarity: "common",
    order: 9,
  },
  {
    name: "Social Butterfly",
    description: "Created 25 posts",
    icon: "🦋",
    criteria: {
      type: "post_creations",
      threshold: 25,
    },
    rarity: "rare",
    order: 10,
  },
  {
    name: "Community Voice",
    description: "Created 100 posts",
    icon: "📢",
    criteria: {
      type: "post_creations",
      threshold: 100,
    },
    rarity: "epic",
    order: 11,
  },
  {
    name: "Social Media Star",
    description: "Created 250 posts",
    icon: "⭐",
    criteria: {
      type: "post_creations",
      threshold: 250,
    },
    rarity: "legendary",
    order: 12,
  },

  // Event Participation Badges
  {
    name: "Event Participant",
    description: "Participated in your first event",
    icon: "🎉",
    criteria: {
      type: "event_participations",
      threshold: 1,
    },
    rarity: "common",
    order: 13,
  },
  {
    name: "Community Leader",
    description: "Participated in 5 events",
    icon: "👥",
    criteria: {
      type: "event_participations",
      threshold: 5,
    },
    rarity: "rare",
    order: 14,
  },
  {
    name: "Event Enthusiast",
    description: "Participated in 15 events",
    icon: "🎊",
    criteria: {
      type: "event_participations",
      threshold: 15,
    },
    rarity: "epic",
    order: 15,
  },
  {
    name: "Community Pillar",
    description: "Participated in 30 events",
    icon: "🏛️",
    criteria: {
      type: "event_participations",
      threshold: 30,
    },
    rarity: "legendary",
    order: 16,
  },

  // Points Badges
  {
    name: "Point Collector",
    description: "Earned 1,000 points",
    icon: "💰",
    criteria: {
      type: "points_earned",
      threshold: 1000,
    },
    rarity: "rare",
    order: 17,
  },
  {
    name: "Point Hoarder",
    description: "Earned 5,000 points",
    icon: "💎",
    criteria: {
      type: "points_earned",
      threshold: 5000,
    },
    rarity: "epic",
    order: 18,
  },
  {
    name: "Point Master",
    description: "Earned 10,000 points",
    icon: "👑",
    criteria: {
      type: "points_earned",
      threshold: 10000,
    },
    rarity: "legendary",
    order: 19,
  },
];

/**
 * Seed badges into CouchDB
 */
async function seedBadges() {
  try {
    console.log("Connecting to CouchDB...");

    // Initialize CouchDB service
    await couchdbService.initialize();
    console.log("Connected to CouchDB");

    // Clear existing badges
    const existingBadges = await couchdbService.findByType('badge');
    
    for (const badge of existingBadges) {
      await couchdbService.deleteDocument(badge._id, badge._rev);
    }
    console.log("Cleared existing badges");

    // Insert new badges
    const couchdbBadges = badges.map((badge, index) => ({
      _id: `badge_${Date.now()}_${index}`,
      type: 'badge',
      name: badge.name,
      description: badge.description,
      icon: badge.icon,
      criteria: badge.criteria,
      rarity: badge.rarity,
      order: badge.order,
      isActive: true,
      createdAt: new Date().toISOString(),
      updatedAt: new Date().toISOString()
    }));

    let successCount = 0;
    for (const badge of couchdbBadges) {
      await couchdbService.createDocument(badge);
      successCount++;
    }
    
    console.log(`Successfully seeded ${successCount} badges`);

    // Display created badges
    couchdbBadges.forEach((badge) => {
      console.log(
        `  ${badge.icon} ${badge.name} (${badge.rarity}) - ${badge.description}`
      );
    });

    console.log("\nDatabase seeding completed");
    process.exit(0);
  } catch (error) {
    console.error("Error seeding badges to CouchDB:", error);
    process.exit(1);
  }
}

// Run the seeder
seedBadges();
