import { PrismaClient } from '@prisma/client';
import * as bcrypt from 'bcrypt';

const prisma = new PrismaClient();

async function main() {
  console.log('Seeding database with rich sample data...');

  // 1. Create Categories
  const categories = [
    { name: 'Bencana Alam', slug: 'bencana-alam', color: 'bg-red-100', icon: 'ShieldAlert' },
    { name: 'Zakat', slug: 'zakat', color: 'bg-emerald-100', icon: 'HeartPulse' },
    { name: 'Pendidikan', slug: 'pendidikan', color: 'bg-indigo-100', icon: 'BookOpen' },
    { name: 'Infrastruktur', slug: 'infrastruktur', color: 'bg-blue-100', icon: 'Building2' },
    { name: 'Kemanusiaan', slug: 'kemanusiaan', color: 'bg-orange-100', icon: 'Users' },
    { name: 'Kesehatan', slug: 'kesehatan', color: 'bg-pink-100', icon: 'Stethoscope' },
  ];

  const createdCategories = [];
  for (const cat of categories) {
    const category = await prisma.category.upsert({
      where: { slug: cat.slug },
      update: {},
      create: {
        name: cat.name,
        slug: cat.slug,
        color: cat.color,
        icon: cat.icon,
      },
    });
    createdCategories.push(category);
  }

  // 2. Create Tenant
  const tenant = await prisma.tenant.upsert({
    where: { slug: 'smartfund-foundation' },
    update: {},
    create: {
      name: 'SmartFund Foundation',
      slug: 'smartfund-foundation',
      description: 'Lembaga amil zakat dan pengelola dana umat terpercaya.',
      email: 'hello@smartfund.id',
      status: 'ACTIVE',
    },
  });

  // 3. Create Admin
  const adminPassword = await bcrypt.hash('admin123', 10);
  const admin = await prisma.user.upsert({
    where: { email: 'admin@smartfund.id' },
    update: {},
    create: {
      fullName: 'Admin SmartFund',
      email: 'admin@smartfund.id',
      passwordHash: adminPassword,
      role: 'ADMIN',
    },
  });

  // 4. Create Banners
  const banners = [
    {
      title: 'Selamat Datang di SmartFund',
      imageUrl: 'https://images.unsplash.com/photo-1593113514050-4d4de451e0cc?q=80&w=1200&auto=format&fit=crop',
      position: 'hero',
      sortOrder: 1,
      isActive: true,
    },
    {
      title: 'Mari Berbagi Kebahagiaan',
      imageUrl: 'https://images.unsplash.com/photo-1488521787991-ed7bbaae773c?q=80&w=1200&auto=format&fit=crop',
      position: 'hero',
      sortOrder: 2,
      isActive: true,
    },
    {
      title: 'Bantu Mereka yang Membutuhkan',
      imageUrl: 'https://images.unsplash.com/photo-1532629345422-7515f3d16bb0?q=80&w=1200&auto=format&fit=crop',
      position: 'middle',
      sortOrder: 1,
      isActive: true,
    }
  ];
  for (const b of banners) {
    // Delete existing with same title to prevent duplication
    await prisma.banner.deleteMany({ where: { title: b.title } });
    await prisma.banner.create({
      data: b
    });
  }

  // 5. Create Campaigns (DONATION, ZAKAT, WAKAF, INFAQ, FIDYAH, QURBAN)
  const campaigns = [
    {
      title: 'Bantu Korban Banjir Bandang Demak',
      slug: 'bantu-korban-banjir-demak',
      shortDescription: 'Ratusan keluarga kehilangan tempat tinggal akibat banjir bandang.',
      description: 'Banjir melanda Demak. Ratusan rumah terendam dan warga sangat membutuhkan bantuan pangan dan pakaian layak pakai.',
      coverImageUrl: 'https://images.unsplash.com/photo-1469571486292-0ba58a3f068b?q=80&w=800&auto=format&fit=crop',
      targetAmount: 500000000,
      collectedAmount: 154500000,
      donorCount: 1245,
      type: 'DONATION',
      isUrgent: true,
      categoryId: createdCategories[0].id,
    },
    {
      title: 'Tunaikan Zakat Maal Anda Tahun Ini',
      slug: 'zakat-maal-2026',
      shortDescription: 'Bersihkan harta dengan zakat maal. Penyaluran tepat sasaran kepada mustahik.',
      description: 'Zakat maal merupakan kewajiban bagi setiap muslim yang telah mencapai nisab. Mari tunaikan zakat Anda untuk membantu saudara kita yang kurang mampu.',
      coverImageUrl: 'https://images.unsplash.com/photo-1554224155-8d04cb21cd6c?q=80&w=800&auto=format&fit=crop',
      targetAmount: 1000000000,
      collectedAmount: 750000000,
      donorCount: 890,
      type: 'ZAKAT',
      isFeatured: true,
      categoryId: createdCategories[1].id,
    },
    {
      title: 'Wakaf Pembangunan Masjid Al-Hidayah Pelosok NTT',
      slug: 'wakaf-masjid-pelosok-ntt',
      shortDescription: 'Membangun rumah ibadah pertama di desa terpencil NTT.',
      description: 'Warga muslim di desa terpencil NTT selama ini beribadah di rumah warga karena tidak ada masjid. Mari wujudkan masjid pertama mereka.',
      coverImageUrl: 'https://images.unsplash.com/photo-1564053489984-317bbd824340?q=80&w=800&auto=format&fit=crop',
      targetAmount: 300000000,
      collectedAmount: 85000000,
      donorCount: 450,
      type: 'WAKAF',
      categoryId: createdCategories[3].id,
    },
    {
      title: 'Infaq Pendidikan Santri Penghafal Quran',
      slug: 'infaq-pendidikan-santri',
      shortDescription: 'Bantu biaya operasional dan pendidikan santri yatim penghafal Quran.',
      description: 'Pesantren Tahfidz Al-Ikhlas mengasuh ratusan santri yatim. Dukung mereka agar terus bisa menghafal dan belajar.',
      coverImageUrl: 'https://images.unsplash.com/photo-1503676260728-1c00da094a0b?q=80&w=800&auto=format&fit=crop',
      targetAmount: 150000000,
      collectedAmount: 120000000,
      donorCount: 620,
      type: 'INFAQ',
      categoryId: createdCategories[2].id,
    },
    {
      title: 'Bayar Fidyah Ramadhan',
      slug: 'bayar-fidyah-ramadhan',
      shortDescription: 'Tunaikan kewajiban fidyah Anda untuk diberikan kepada fakir miskin.',
      description: 'Bagi Anda yang tidak mampu berpuasa dengan alasan syari, mari tunaikan fidyah untuk memberi makan fakir miskin di sekitar kita.',
      coverImageUrl: 'https://images.unsplash.com/photo-1511690656952-34342bb7c2f2?q=80&w=800&auto=format&fit=crop',
      targetAmount: 50000000,
      collectedAmount: 34000000,
      donorCount: 300,
      type: 'FIDYAH',
      categoryId: createdCategories[4].id,
    },
    {
      title: 'Patungan Qurban di Daerah Rawan Pangan',
      slug: 'patungan-qurban-pelosok',
      shortDescription: 'Satu sapi untuk 7 orang. Salurkan daging qurban ke desa pelosok.',
      description: 'Mari bergabung dalam program patungan qurban untuk membahagiakan warga di desa-desa yang jarang memakan daging.',
      coverImageUrl: 'https://images.unsplash.com/photo-1598463040804-4b5536ee1b1c?q=80&w=800&auto=format&fit=crop',
      targetAmount: 200000000,
      collectedAmount: 180000000,
      donorCount: 75,
      type: 'QURBAN',
      categoryId: createdCategories[4].id,
    }
  ];

  for (const c of campaigns) {
    await prisma.campaign.upsert({
      where: { slug: c.slug },
      update: {
        type: c.type as any,
        coverImageUrl: c.coverImageUrl,
        shortDescription: c.shortDescription,
        isUrgent: c.isUrgent || false,
        isFeatured: c.isFeatured || false,
        targetAmount: c.targetAmount,
        collectedAmount: c.collectedAmount,
      },
      create: {
        title: c.title,
        slug: c.slug,
        shortDescription: c.shortDescription,
        description: c.description,
        coverImageUrl: c.coverImageUrl,
        targetAmount: c.targetAmount,
        collectedAmount: c.collectedAmount,
        donorCount: c.donorCount,
        tenantId: tenant.id,
        categoryId: c.categoryId,
        createdBy: admin.id,
        status: 'ACTIVE',
        type: c.type as any,
        isUrgent: c.isUrgent || false,
        isFeatured: c.isFeatured || false,
      },
    });
  }

  // 6. Create Articles
  const articles = [
    {
      title: 'Pentingnya Berbagi di Masa Krisis',
      slug: 'pentingnya-berbagi-masa-krisis',
      excerpt: 'Masa krisis mengajarkan kita arti solidaritas dan kemanusiaan yang sesungguhnya.',
      content: '<p>Di tengah situasi sulit, kebersamaan adalah kunci. Membantu sesama tidak hanya meringankan beban mereka yang membutuhkan, tetapi juga membawa ketenangan batin bagi yang memberi.</p>',
      coverImageUrl: 'https://images.unsplash.com/photo-1593113514050-4d4de451e0cc?q=80&w=800&auto=format&fit=crop',
      category: 'Inspirasi',
      tags: ['Sosial', 'Kemanusiaan'],
      status: 'published',
    },
    {
      title: 'Menyalurkan Zakat Tepat Sasaran',
      slug: 'menyalurkan-zakat-tepat-sasaran',
      excerpt: 'Zakat memiliki potensi besar untuk mengentaskan kemiskinan jika dikelola dengan baik.',
      content: '<p>Distribusi zakat yang transparan dan terstruktur akan berdampak langsung pada kesejahteraan mustahik. Lembaga amil zakat memainkan peran krusial dalam proses ini.</p>',
      coverImageUrl: 'https://images.unsplash.com/photo-1584483766114-2cea6facdf57?q=80&w=800&auto=format&fit=crop',
      category: 'Edukasi',
      tags: ['Zakat', 'Ekonomi Islam'],
      status: 'published',
    },
    {
      title: 'Laporan Penyaluran Bantuan Bencana Demak',
      slug: 'laporan-penyaluran-bencana-demak',
      excerpt: 'Terima kasih donatur! Bantuan tahap pertama telah didistribusikan kepada 500 keluarga terdampak.',
      content: '<p>Tim relawan kami telah berhasil mendistribusikan paket sembako, pakaian hangat, dan obat-obatan ke desa-desa yang terisolir akibat banjir bandang di Demak.</p>',
      coverImageUrl: 'https://images.unsplash.com/photo-1469571486292-0ba58a3f068b?q=80&w=800&auto=format&fit=crop',
      category: 'Laporan',
      tags: ['Laporan', 'Bencana Alam'],
      status: 'published',
    }
  ];

  for (const a of articles) {
    await prisma.article.upsert({
      where: { slug: a.slug },
      update: {
        coverImageUrl: a.coverImageUrl,
        excerpt: a.excerpt,
        content: a.content,
      },
      create: {
        title: a.title,
        slug: a.slug,
        excerpt: a.excerpt,
        content: a.content,
        coverImageUrl: a.coverImageUrl,
        category: a.category,
        tags: a.tags,
        status: a.status,
        authorId: admin.id,
        tenantId: tenant.id,
        publishedAt: new Date(),
      },
    });
  }

  // 7. Testimonials
  const testimonials = [
    {
      name: 'Budi Santoso',
      role: 'Donatur Rutin',
      content: 'Platform yang sangat transparan dan mudah digunakan. Saya selalu berdonasi setiap Jumat lewat SmartFund.',
      rating: 5,
    },
    {
      name: 'Siti Aminah',
      role: 'Relawan',
      content: 'Proses pencairan dana sangat cepat dan sangat membantu tim kami di lapangan.',
      rating: 5,
    }
  ];

  await prisma.testimonial.deleteMany({});
  for (const t of testimonials) {
    await prisma.testimonial.create({
      data: t
    });
  }

  console.log('Database seeding completed successfully!');
}

main()
  .catch((e) => {
    console.error(e);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });
