using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using isnd.Data.ApiKeys;
using isnd.Data.Packages;

namespace isnd.Data
{
    /// <summary>
    /// Application Db Context
    /// </summary>
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        /// <summary>
        /// db context ctor
        /// </summary>
        /// <param name="options"></param>
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options) { }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
            _ = builder.Entity<PackageVersion>()
            .HasKey( v => new { v.PackageId, v.FullString } );
            _ = builder.Entity<PackageVersion>()
            .HasOne(v => v.Package).WithMany(p => p.Versions).HasForeignKey(x =>  x.PackageId);
        }


        /// <summary>
        /// User API keys
        /// </summary>
        /// <value></value>
        public DbSet<ApiKey> ApiKeys { get; set; }

        /// <summary>
        /// Packages
        /// </summary>
        /// <value></value>
        public DbSet<Package> Packages { get; set; }

        /// <summary>
        /// Package Versions
        /// </summary>
        /// <value></value>
        public DbSet<PackageVersion> PackageVersions { get; set; }

        /// <summary>
        /// Commits
        /// </summary>
        /// <value></value>
        public DbSet<Commit> Commits { get; set; }
    }
}
