using Microsoft.EntityFrameworkCore; using PetCompanion.Models; namespace PetCompanion.Data { public class ApplicationDbContext : DbContext { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } public DbSet<Pet> Pets { get; set; } public DbSet<PetStats> PetStats { get; set; } public DbSet<Resources> Resources { get; set; } public DbSet<Skill> Skills { get; set; } public DbSet<SkillEffect> SkillEffects { get; set; } public DbSet<PetSkill> PetSkills { get; set; } public DbSet<GameItem> GameItems { get; set; } public DbSet<Inventory> Inventories { get; set; } public DbSet<EquippedItem> EquippedItems { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // Configure DateTime properties to be stored as UTC modelBuilder.Entity<Pet>() .Property(p => p.GatherActionSince) .HasConversion( v => v.ToUniversalTime(), v => DateTime.SpecifyKind(v, DateTimeKind.Utc)); modelBuilder.Entity<Pet>() .Property(p => p.BasicActionCooldown) .HasConversion( v => v != DateTime.MinValue ? v.ToUniversalTime() : v, v => v != DateTime.MinValue ? DateTime.SpecifyKind(v, DateTimeKind.Utc) : v); modelBuilder.Entity<PetSkill>() .HasOne(ps => ps.Pet) .WithMany(p => p.Skills) .HasForeignKey(ps => ps.PetId); modelBuilder.Entity<PetSkill>() .HasOne(ps => ps.Skill) .WithMany(s => s.PetSkills) .HasForeignKey(ps => ps.SkillId); modelBuilder.Entity<SkillEffect>() .HasOne(se => se.Skill) .WithMany(s => s.Effects) .HasForeignKey(se => se.SkillId); modelBuilder.Entity<EquippedItem>() .HasOne(e => e.Pet) .WithMany(p => p.EquippedItemsList) .HasForeignKey(e => e.PetId); modelBuilder.Entity<EquippedItem>() .HasOne(e => e.GameItem) .WithMany() .HasForeignKey(e => e.GameItemId); // Seed initial skills var skills = SkillsData.GetInitialSkills(); var skillWithoutEffects = SkillsData.GetInitialSkills().Select(s => new Skill { Id = s.Id, Name = s.Name, Type = s.Type, Description = s.Description, PointsCost = s.PointsCost, Icon = s.Icon, SkillsIdRequired = s.SkillsIdRequired }).ToList(); foreach (var skill in skillWithoutEffects) { modelBuilder.Entity<Skill>().HasData(skill); } foreach (var skill in skills) { foreach (var effect in skill.Effects) { modelBuilder.Entity<SkillEffect>().HasData(effect); } } } } }