"""
Seed script for RH Elektronik - MySQL Version
Seeds all initial data: admin, services, brands, areas, contact, products, and blog posts
"""
import sys
sys.path.insert(0, '/app/backend')

from database import SessionLocal, engine, Base
from models import Admin, BlogPost, Service, Brand, Area, Contact, AboutCard, Product
from passlib.context import CryptContext
import uuid

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

def get_password_hash(password):
    return pwd_context.hash(password)

def seed_all():
    # Create tables
    Base.metadata.create_all(bind=engine)
    
    db = SessionLocal()
    
    try:
        # ==================== ADMIN ====================
        existing_admin = db.query(Admin).filter(Admin.username == "admin").first()
        if not existing_admin:
            admin = Admin(
                id=str(uuid.uuid4()),
                username="admin",
                password_hash=get_password_hash("admin123"),
                role="admin"
            )
            db.add(admin)
            print("✅ Admin user created (username: admin, password: admin123)")
        else:
            print("ℹ️ Admin already exists")
        
        # ==================== SERVICES ====================
        if db.query(Service).count() == 0:
            services = [
                Service(id=str(uuid.uuid4()), title="Servis TV", description="Perbaikan semua jenis TV LED, LCD, Plasma, dan TV Tabung dengan teknisi berpengalaman", icon="tv", order_num=1),
                Service(id=str(uuid.uuid4()), title="Servis AC", description="Service, cuci, dan perbaikan AC split, AC central, dan standing floor", icon="wind", order_num=2),
                Service(id=str(uuid.uuid4()), title="Servis Kulkas", description="Perbaikan kulkas 1 pintu, 2 pintu, side by side, dan freezer box", icon="thermometer", order_num=3),
                Service(id=str(uuid.uuid4()), title="Servis Mesin Cuci", description="Service mesin cuci top loading, front loading, dan mesin pengering", icon="droplets", order_num=4),
                Service(id=str(uuid.uuid4()), title="Instalasi Listrik", description="Pemasangan instalasi listrik rumah, kantor, dan industri yang aman", icon="zap", order_num=5),
                Service(id=str(uuid.uuid4()), title="Servis Elektronik Lainnya", description="Perbaikan microwave, dispenser, rice cooker, dan peralatan elektronik lainnya", icon="wrench", order_num=6),
            ]
            db.add_all(services)
            print(f"✅ {len(services)} services created")
        else:
            print("ℹ️ Services already exist")
        
        # ==================== BRANDS ====================
        if db.query(Brand).count() == 0:
            brands = [
                Brand(id=str(uuid.uuid4()), name="Samsung", logo_url="https://upload.wikimedia.org/wikipedia/commons/2/24/Samsung_Logo.svg", alt_text="Samsung Electronics", order_num=1),
                Brand(id=str(uuid.uuid4()), name="LG", logo_url="https://upload.wikimedia.org/wikipedia/commons/2/20/LG_symbol.svg", alt_text="LG Electronics", order_num=2),
                Brand(id=str(uuid.uuid4()), name="Sony", logo_url="https://upload.wikimedia.org/wikipedia/commons/c/ca/Sony_logo.svg", alt_text="Sony Corporation", order_num=3),
                Brand(id=str(uuid.uuid4()), name="Panasonic", logo_url="https://upload.wikimedia.org/wikipedia/commons/5/53/Panasonic_logo_%28Blue%29.svg", alt_text="Panasonic Corporation", order_num=4),
                Brand(id=str(uuid.uuid4()), name="Sharp", logo_url="https://upload.wikimedia.org/wikipedia/commons/6/6a/Sharp_logo.svg", alt_text="Sharp Corporation", order_num=5),
                Brand(id=str(uuid.uuid4()), name="Toshiba", logo_url="https://upload.wikimedia.org/wikipedia/commons/0/0d/Toshiba_logo.svg", alt_text="Toshiba Corporation", order_num=6),
            ]
            db.add_all(brands)
            print(f"✅ {len(brands)} brands created")
        else:
            print("ℹ️ Brands already exist")
        
        # ==================== AREAS ====================
        if db.query(Area).count() == 0:
            areas = [
                Area(id=str(uuid.uuid4()), province="Jawa Barat", cities=["Tasikmalaya", "Ciamis", "Banjar", "Garut", "Sumedang", "Bandung"]),
                Area(id=str(uuid.uuid4()), province="Jawa Tengah", cities=["Cilacap", "Banyumas", "Purwokerto"]),
            ]
            db.add_all(areas)
            print(f"✅ {len(areas)} areas created")
        else:
            print("ℹ️ Areas already exist")
        
        # ==================== CONTACT ====================
        if not db.query(Contact).filter(Contact.id == "main").first():
            contact = Contact(
                id="main",
                phone="+62 815-5433-3316",
                email="cs.rhelektronik@gmail.com",
                address="CV RH Elektronik, Jl. Pasar Gn.Kalong 01/09 Tasikmalaya, Jawa Barat, Indonesia",
                hours="Senin - Sabtu, 08.00 - 16.00 WIB",
                map_embed=""
            )
            db.add(contact)
            print("✅ Contact info created")
        else:
            print("ℹ️ Contact already exists")
        
        # ==================== ABOUT CARDS ====================
        if db.query(AboutCard).count() == 0:
            about_cards = [
                AboutCard(id=str(uuid.uuid4()), title="Pengalaman 15+ Tahun", description="Melayani perbaikan elektronik sejak 2008 dengan ribuan pelanggan puas", order_num=1),
                AboutCard(id=str(uuid.uuid4()), title="Teknisi Bersertifikat", description="Tim teknisi profesional dengan sertifikasi dari berbagai brand elektronik", order_num=2),
                AboutCard(id=str(uuid.uuid4()), title="Garansi Service", description="Memberikan garansi untuk setiap perbaikan yang kami lakukan", order_num=3),
                AboutCard(id=str(uuid.uuid4()), title="Harga Transparan", description="Estimasi biaya jelas di awal, tanpa biaya tersembunyi", order_num=4),
            ]
            db.add_all(about_cards)
            print(f"✅ {len(about_cards)} about cards created")
        else:
            print("ℹ️ About cards already exist")
        
        # ==================== PRODUCTS ====================
        if db.query(Product).count() == 0:
            products = [
                Product(
                    id=str(uuid.uuid4()),
                    name="Remote TV Universal",
                    slug="remote-tv-universal",
                    description="Remote TV universal cocok untuk semua merk TV LED/LCD. Mudah diprogram dan tahan lama.",
                    price=45000,
                    original_price=65000,
                    category="Aksesoris",
                    brand="Universal",
                    images=["/uploads/remote-tv.jpg"],
                    stock=50,
                    is_available=True,
                    featured=True
                ),
                Product(
                    id=str(uuid.uuid4()),
                    name="Kapasitor AC 25uF",
                    slug="kapasitor-ac-25uf",
                    description="Kapasitor AC berkualitas tinggi 25uF/450V. Cocok untuk AC 1/2 - 1 PK.",
                    price=35000,
                    original_price=50000,
                    category="Spareparts",
                    brand="Generic",
                    images=["/uploads/kapasitor.jpg"],
                    stock=100,
                    is_available=True,
                    featured=True
                ),
                Product(
                    id=str(uuid.uuid4()),
                    name="Freon R32 Refill",
                    slug="freon-r32-refill",
                    description="Jasa isi ulang freon R32 untuk AC inverter. Harga sudah termasuk jasa.",
                    price=250000,
                    original_price=350000,
                    category="Spareparts",
                    brand="Generic",
                    images=["/uploads/freon.jpg"],
                    stock=999,
                    is_available=True,
                    featured=True
                ),
                Product(
                    id=str(uuid.uuid4()),
                    name="Mainboard TV LED 32 inch",
                    slug="mainboard-tv-led-32",
                    description="Mainboard pengganti untuk TV LED 32 inch berbagai merk. Hubungi untuk cek ketersediaan model.",
                    price=450000,
                    original_price=600000,
                    category="Spareparts",
                    brand="Universal",
                    images=["/uploads/mainboard.jpg"],
                    stock=10,
                    is_available=True,
                    featured=False
                ),
                Product(
                    id=str(uuid.uuid4()),
                    name="Kabel HDMI 2M",
                    slug="kabel-hdmi-2m",
                    description="Kabel HDMI 2 meter high speed support 4K. Cocok untuk TV, PS, PC.",
                    price=55000,
                    original_price=80000,
                    category="Aksesoris",
                    brand="Generic",
                    images=["/uploads/hdmi.jpg"],
                    stock=30,
                    is_available=True,
                    featured=False
                ),
            ]
            db.add_all(products)
            print(f"✅ {len(products)} products created")
        else:
            print("ℹ️ Products already exist")
        
        # ==================== BLOG POSTS ====================
        if db.query(BlogPost).count() == 0:
            blog_posts = [
                BlogPost(
                    id=str(uuid.uuid4()),
                    title="Tips Merawat AC Agar Tetap Dingin dan Hemat Listrik",
                    slug="tips-merawat-ac-agar-tetap-dingin",
                    content="""<h2>Pendahuluan</h2>
<p>AC adalah salah satu peralatan elektronik yang paling banyak digunakan di rumah tangga Indonesia. Namun, tanpa perawatan yang tepat, AC bisa menjadi boros listrik dan tidak dingin maksimal.</p>

<h2>Tips Perawatan AC</h2>
<h3>1. Bersihkan Filter Secara Rutin</h3>
<p>Filter AC harus dibersihkan minimal 2 minggu sekali. Filter yang kotor akan menghambat aliran udara dan membuat AC bekerja lebih keras.</p>

<h3>2. Service AC Berkala</h3>
<p>Lakukan service AC minimal 3 bulan sekali. Teknisi akan membersihkan evaporator, mengecek freon, dan memastikan semua komponen berfungsi baik.</p>

<h3>3. Atur Suhu yang Tepat</h3>
<p>Suhu ideal AC adalah 24-26°C. Setiap penurunan 1°C akan menambah konsumsi listrik sekitar 6%.</p>

<h2>Kesimpulan</h2>
<p>Dengan perawatan yang tepat, AC Anda akan tetap dingin, hemat listrik, dan berumur panjang. Hubungi RH Elektronik untuk layanan service AC profesional.</p>""",
                    excerpt="Pelajari cara merawat AC dengan benar agar tetap dingin maksimal dan hemat listrik. Tips dari teknisi berpengalaman RH Elektronik.",
                    meta_description="Tips merawat AC agar tetap dingin dan hemat listrik. Panduan lengkap perawatan AC dari RH Elektronik Tasikmalaya.",
                    meta_keywords="tips merawat ac, service ac, ac hemat listrik, perawatan ac",
                    author="Admin",
                    featured_image="/uploads/ac-service.jpg",
                    status="published",
                    views=150
                ),
                BlogPost(
                    id=str(uuid.uuid4()),
                    title="Penyebab TV LED Tidak Menyala dan Cara Mengatasinya",
                    slug="penyebab-tv-led-tidak-menyala",
                    content="""<h2>Masalah Umum TV LED</h2>
<p>TV LED yang tidak menyala adalah masalah yang sering dialami. Berikut beberapa penyebab dan solusinya.</p>

<h2>Penyebab dan Solusi</h2>
<h3>1. Masalah Power Supply</h3>
<p>Power supply yang rusak adalah penyebab paling umum. Ciri-cirinya TV tidak ada tanda-tanda hidup sama sekali.</p>

<h3>2. Mainboard Bermasalah</h3>
<p>Jika lampu standby menyala tapi TV tidak bisa dinyalakan, kemungkinan mainboard bermasalah.</p>

<h3>3. Backlight Mati</h3>
<p>TV menyala tapi layar gelap? Bisa jadi backlight LED-nya mati dan perlu diganti.</p>

<h2>Kapan Harus ke Teknisi?</h2>
<p>Jika TV Anda mengalami masalah di atas, sebaiknya bawa ke teknisi profesional. Perbaikan sendiri tanpa pengalaman bisa berbahaya.</p>""",
                    excerpt="TV LED tidak menyala? Kenali penyebab umum dan cara mengatasinya. Panduan dari teknisi TV berpengalaman.",
                    meta_description="Penyebab TV LED tidak menyala dan cara mengatasinya. Solusi lengkap dari RH Elektronik.",
                    meta_keywords="tv led tidak menyala, service tv, perbaikan tv led",
                    author="Admin",
                    featured_image="/uploads/tv-repair.jpg",
                    status="published",
                    views=230
                ),
            ]
            db.add_all(blog_posts)
            print(f"✅ {len(blog_posts)} blog posts created")
        else:
            print("ℹ️ Blog posts already exist")
        
        db.commit()
        print("\n🎉 All data seeded successfully!")
        
    except Exception as e:
        db.rollback()
        print(f"❌ Error seeding data: {e}")
        raise
    finally:
        db.close()

if __name__ == "__main__":
    seed_all()
