package db

import (
	"app/shelfly/internal/debridlink"
	"app/shelfly/internal/download"
	"app/shelfly/internal/models"
	"fmt"
	"golang.org/x/crypto/bcrypt"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
	"log"
)

func InitDB() *gorm.DB {
	dbName := "/app/shelfly_db/shelfly_db.db"
	db, err := gorm.Open(sqlite.Open(dbName), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}

	db.AutoMigrate(
		&models.User{},
		&models.Files{},
		&models.LibrarySection{},
		&models.MediaItem{},
		&models.MediaPart{},
		&models.MetadataItem{},
		&models.SectionLocation{},
		&models.Tag{},
		&models.Tagging{},
		&models.PathDownload{},
		&debridlink.File{},
		&debridlink.Link{},
		&debridlink.RSSFeed{},
		&debridlink.RSSItem{},
		&debridlink.Torrent{},
		&debridlink.DebridAccount{},
		&download.DownloadJob{},
	)
	InitDefaultAdmin(db)
	fmt.Println("Connexion réussie à SQLite !")
	fmt.Println("Auto migration terminée")
	return db
}
func InitDefaultAdmin(db *gorm.DB) {
	const email = "canguijc@gmail.com"
	const username = "admin"
	const name = "Admin"
	const password = "GHT30k7!"

	var user models.User
	result := db.Where("email = ?", email).First(&user)

	if result.Error == gorm.ErrRecordNotFound {
		hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
		if err != nil {
			log.Fatalf("Erreur lors du hash du mot de passe: %v", err)
		}

		newUser := models.User{
			Email:    email,
			Username: username,
			Name:     name,
			Password: string(hashedPassword),
		}

		if err := db.Create(&newUser).Error; err != nil {
			log.Fatalf("Erreur lors de la création de l'utilisateur admin: %v", err)
		}

		log.Println("✅ Utilisateur administrateur créé avec succès")
	} else if result.Error != nil {
		log.Fatalf("Erreur lors de la vérification de l'utilisateur admin: %v", result.Error)
	} else {
		log.Println("ℹ️ L'utilisateur administrateur existe déjà")
	}
}



