using ConstructorApp.EntityLayer.Entities;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using static ConstructorApp.EntityLayer.Entities.Project;

namespace ConstructorApp.DataAccessLayer.Concrete
{
    public class ConstructorContext : IdentityDbContext<AppUser, AppRole, int>
    {
        public ConstructorContext(DbContextOptions<ConstructorContext> options) : base(options)
        {
        }

        public DbSet<CompanyInfo> CompanyInfo { get; set; }
        public DbSet<ContactUs> ContactUs { get; set; }
        public DbSet<Footer> Footer { get; set; }
        public DbSet<HomeBanner> HomeBanners { get; set; }
        public DbSet<Project> Projects { get; set; }
        public DbSet<ProjectGallery> ProjectGallery { get; set; }
        public DbSet<Service> Services { get; set; }
        public DbSet<Slider> Sliders { get; set; }
        public DbSet<Team> Teams { get; set; }
        public DbSet<Testimonial> Testimonials { get; set; }
        public DbSet<WorkProcess> WorkProcess { get; set; }
        public DbSet<CompanyInfoVideo> CompanyInfoVideo { get; set; }
        public DbSet<Reference> References { get; set; }


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            //lokal migration
            optionsBuilder.UseSqlServer("Server=SABI;initial Catalog=CONSTRUCTOR;User ID=sa;Password=13579spP!!!!;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True");

            //uzak migration
            optionsBuilder.UseSqlServer("Server=94.138.207.4;initial Catalog=CONSTRUCTOR;User ID=sa;Password=XeFu*t7VXFE&s%)_HwKDk!;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True");

            //optionsBuilder.ConfigureWarnings(warnings => warnings.Ignore(RelationalEventId.PendingModelChangesWarning));
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<CompanyInfo>().HasData(
                new CompanyInfo
                {
                    CompanyInfoID = 1,
                    Value = "7",
                    Title = "YIL",
                    SubTitle = "2011 yılından bu yana sektörde faaliyet göstermekteyiz."
                },
                new CompanyInfo
                {
                    CompanyInfoID = 2,
                    Value = "54",
                    Title = "PROJE",
                    SubTitle = "Bugüne kadar 54 adet konut projesi tasarladık."
                },
                new CompanyInfo
                {
                    CompanyInfoID = 3,
                    Value = "11",
                    Title = "ÖDÜL",
                    SubTitle = "Şirketimiz yaratıcılığı nedeniyle birçok kez ödüle layık görüldü."
                }
            );

            var hasher = new PasswordHasher<AppUser>();
            modelBuilder.Entity<AppUser>().HasData(
                new AppUser
                {
                    Id = 1, // int id veya GUID 
                    FirstName = "Admin",
                    LastName = "Admin",
                    ImageUrl = "/SeedData/defaultuser.png",
                    UserName = "admin",
                    NormalizedUserName = "ADMIN",
                    Email = "admin@example.com",
                    NormalizedEmail = "ADMIN@EXAMPLE.COM",
                    EmailConfirmed = true,
                    PasswordHash = hasher.HashPassword(null, "Password123!"),
                    SecurityStamp = Guid.NewGuid().ToString("D")
                }
                );

            modelBuilder.Entity<AppRole>().HasData(
                new AppRole
                {
                    Id = 1, // int id veya GUID 
                    Name = "Admin",
                    NormalizedName = "ADMIN",
                    ConcurrencyStamp = Guid.NewGuid().ToString("D")
                }
                );

            modelBuilder.Entity<IdentityUserRole<int>>().HasData(
            new IdentityUserRole<int>
            {
                UserId = 1,
                RoleId = 1
            }
            );

            modelBuilder.Entity<CompanyInfoVideo>().HasData(
                new CompanyInfoVideo
                {
                    CompanyInfoVideoID = 1,
                    VideoUrl = "https://www.youtube.com/watch?v=r-thd4PJKBw"
                }
            );

            modelBuilder.Entity<Footer>().HasData(
                new Footer
                {
                    FooterID = 1,
                    Phone = "0999 999 99 99",
                    Mail = "insaatmimarlik@mimarlik.com",
                    Facebook = "https://facebook.com",
                    Instagram = "https://instagram.com",
                    Linkedin = "https://linkedin.com",
                    Youtube = "https://youtube.com",
                    LogoUrl = "/SeedData/Logo.png"
                }
            );

            modelBuilder.Entity<HomeBanner>().HasData(
                new HomeBanner
                {
                    HomeBannerID = 1,
                    Title = "Tasarım & İnşaat",
                    SubTitle = "150 m2'den başlayan modern enerji tasarruflu evler.",
                    LogoUrl = "/SeedData/Logo.png"
                }
            );

            modelBuilder.Entity<Project>().HasData(
                new Project
                {
                    ProjectID = 1,
                    CoverUrl = "/SeedData/Project-3.png",
                    Date = DateOnly.Parse("2025-04-15"),
                    Title = "Taşevler",
                    Location = "3119 Mulberry Ln, Newcastle, UK",
                    ShortDescription = "Eski 2 katlı evi tamamen genişletip yeniden tasarlamak için üç ay boyunca bu proje üzerinde çalıştık.",
                    IsActive = true,
                    Slug = "tasevler",
                    LongDescription = "Autem ipsum nam porro corporis rerum. Quis eos dolorem eos itaque inventore commodi labore quia quia. Exercitationem repudiandae officiis neque suscipit non officia eaque itaque enim. Voluptatem officia accusantium nesciunt est omnis tempora consectetur dignissimos. Sequi nulla at esse enim cum deserunt eius.\r\nAmet consequatur qui dolore veniam voluptatem voluptatem sit. Non aspernatur atque natus ut cum nam et. Praesentium error dolores rerum minus sequi quia veritatis eum. Eos et doloribus doloremque nesciunt molestiae laboriosam.\r\nImpedit ipsum quae et aliquid doloribus et voluptatem quasi. Perspiciatis occaecati earum et magnam animi. Quibusdam non qui ea vitae suscipit vitae sunt. Repudiandae incidunt cumque minus deserunt assumenda tempore. Delectus voluptas necessitatibus est.\r\nSunt voluptatum sapiente facilis quo odio aut ipsum repellat debitis. Molestiae et autem libero. Explicabo et quod necessitatibus similique quis dolor eum. Numquam eaque praesentium rem et qui nesciunt.",
                    GoogleMapIFrame = "https://www.google.com/maps/embed?pb=!1m13!1m8!1m3!1d50122.87145390096!2d26.7044768!3d38.2637395!3m2!1i1024!2i768!4f13.1!3m2!1m1!2s!5e0!3m2!1str!2str!4v1722545102804!5m2!1str!2str",
                    VideoUrl = "https://www.youtube.com/watch?v=r-thd4PJKBw",
                    FloorPlanUrl = "/SeedData/floor-plan.png",
                    Status = ProjectStatus.Completed
                },
                new Project
                {
                    ProjectID = 2,
                    CoverUrl = "/SeedData/Project-2.png",
                    Date = DateOnly.Parse("2026-02-15"),
                    Title = "Yatay Mimari",
                    Location = "2560 Russell st, Boston, MA",
                    ShortDescription = "2022 yılındaki ilk projelerimizden biri olan bu ev, benzersiz peyzaj tasarım çözümleri ve dış cephe çalışmalarıyla dikkat çekiyor.",
                    IsActive = true,
                    Slug = "yataymimari",
                    LongDescription = "Autem ipsum nam porro corporis rerum. Quis eos dolorem eos itaque inventore commodi labore quia quia. Exercitationem repudiandae officiis neque suscipit non officia eaque itaque enim. Voluptatem officia accusantium nesciunt est omnis tempora consectetur dignissimos. Sequi nulla at esse enim cum deserunt eius.\r\nAmet consequatur qui dolore veniam voluptatem voluptatem sit. Non aspernatur atque natus ut cum nam et. Praesentium error dolores rerum minus sequi quia veritatis eum. Eos et doloribus doloremque nesciunt molestiae laboriosam.\r\nImpedit ipsum quae et aliquid doloribus et voluptatem quasi. Perspiciatis occaecati earum et magnam animi. Quibusdam non qui ea vitae suscipit vitae sunt. Repudiandae incidunt cumque minus deserunt assumenda tempore. Delectus voluptas necessitatibus est.\r\nSunt voluptatum sapiente facilis quo odio aut ipsum repellat debitis. Molestiae et autem libero. Explicabo et quod necessitatibus similique quis dolor eum. Numquam eaque praesentium rem et qui nesciunt.",
                    GoogleMapIFrame = "https://www.google.com/maps/embed?pb=!1m13!1m8!1m3!1d50122.87145390096!2d26.7044768!3d38.2637395!3m2!1i1024!2i768!4f13.1!3m2!1m1!2s!5e0!3m2!1str!2str!4v1722545102804!5m2!1str!2str",
                    VideoUrl = "https://www.youtube.com/watch?v=r-thd4PJKBw",
                    FloorPlanUrl = "/SeedData/floor-plan.png",
                    Status = ProjectStatus.UnderConstruction

                },
                new Project
                {
                    ProjectID = 3,
                    CoverUrl = "/SeedData/Project-1.png",
                    Date = DateOnly.Parse("2027-01-10"),
                    Title = "Modern Mimari",
                    Location = "123 Ave. Boston",
                    ShortDescription = "2022 yılındaki ilk projelerimizden biri olan bu ev, benzersiz peyzaj tasarım çözümleri ve dış cephe çalışmalarıyla dikkat çekiyor.",
                    IsActive = true,
                    Slug = "modernmimari",
                    LongDescription = "Autem ipsum nam porro corporis rerum. Quis eos dolorem eos itaque inventore commodi labore quia quia. Exercitationem repudiandae officiis neque suscipit non officia eaque itaque enim. Voluptatem officia accusantium nesciunt est omnis tempora consectetur dignissimos. Sequi nulla at esse enim cum deserunt eius.\r\nAmet consequatur qui dolore veniam voluptatem voluptatem sit. Non aspernatur atque natus ut cum nam et. Praesentium error dolores rerum minus sequi quia veritatis eum. Eos et doloribus doloremque nesciunt molestiae laboriosam.\r\nImpedit ipsum quae et aliquid doloribus et voluptatem quasi. Perspiciatis occaecati earum et magnam animi. Quibusdam non qui ea vitae suscipit vitae sunt. Repudiandae incidunt cumque minus deserunt assumenda tempore. Delectus voluptas necessitatibus est.\r\nSunt voluptatum sapiente facilis quo odio aut ipsum repellat debitis. Molestiae et autem libero. Explicabo et quod necessitatibus similique quis dolor eum. Numquam eaque praesentium rem et qui nesciunt.",
                    GoogleMapIFrame = "https://www.google.com/maps/embed?pb=!1m13!1m8!1m3!1d50122.87145390096!2d26.7044768!3d38.2637395!3m2!1i1024!2i768!4f13.1!3m2!1m1!2s!5e0!3m2!1str!2str!4v1722545102804!5m2!1str!2str",
                    VideoUrl = "https://www.youtube.com/watch?v=r-thd4PJKBw",
                    FloorPlanUrl = "/SeedData/floor-plan.png",
                    Status = ProjectStatus.Planned
                }
            );

            modelBuilder.Entity<Reference>().HasData(
                new Reference
                {
                    ReferenceID = 1,
                    LogoUrl = "/SeedData/Reference-1.png",
                    WebUrl = "https://google.com"
                },
                new Reference
                {
                    ReferenceID = 2,
                    LogoUrl = "/SeedData/Reference-2.png",
                    WebUrl = "https://google.com"
                },
                new Reference
                {
                    ReferenceID = 3,
                    LogoUrl = "/SeedData/Reference-3.png",
                    WebUrl = "https://google.com"
                },
                new Reference
                {
                    ReferenceID = 4,
                    LogoUrl = "/SeedData/Reference-4.png",
                    WebUrl = "https://google.com"
                },
                new Reference
                {
                    ReferenceID = 5,
                    LogoUrl = "/SeedData/Reference-5.png",
                    WebUrl = "https://google.com"
                },
                new Reference
                {
                    ReferenceID = 6,
                    LogoUrl = "/SeedData/Reference-6.png",
                    WebUrl = "https://google.com"
                }
            );

            modelBuilder.Entity<Service>().HasData(
                new Service
                {
                    ServiceID = 1,
                    Title = "Mimarlık",
                    SubTitle = "Yüksek kalitede mimarlık hizmetleri sunuyoruz.",
                    IsActive = true
                },
                new Service
                {
                    ServiceID = 2,
                    Title = "İç mekan tasarımı",
                    SubTitle = "Ekibimiz özgün ve şık mimari çözümler sunmaktadır.",
                    IsActive = true
                },
                new Service
                {
                    ServiceID = 3,
                    Title = "Peyzaj Mimarisi",
                    SubTitle = "Estetik ve fonksiyonelliği bir araya getiren peyzaj çözümleri üretiyoruz.",
                    IsActive = true
                }
            );

            modelBuilder.Entity<Slider>().HasData(
                new Slider
                {
                    SliderID = 1,
                    Location = "2750 Duffy St",
                    Sqm = "200",
                    PriceInfo = "400.000",
                    ImageUrl = "/SeedData/Slider-1.png"
                },
                new Slider
                {
                    SliderID = 2,
                    Location = "5032 Hewes Ave",
                    Sqm = "290",
                    PriceInfo = "490.000",
                    ImageUrl = "/SeedData/Slider-2.png"
                },
                new Slider
                {
                    SliderID = 3,
                    Location = "2239 Wilmar Farm Rd",
                    Sqm = "350",
                    PriceInfo = "550.000",
                    ImageUrl = "/SeedData/Slider-3.png"
                }
            );

            modelBuilder.Entity<Team>().HasData(
                new Team
                {
                    TeamID = 1,
                    NameSurname = "Meryem Sağkut",
                    Title = "Baş İç Mimar",
                    ImageUrl = "/SeedData/Team-1.jpg",
                    Facebook = "https://facebook.com",
                    Instagram = "https://instagram.com",
                    Linkedin = "https://linkedin.com"
                },
                new Team
                {
                    TeamID = 2,
                    NameSurname = "Can Balamir",
                    Title = "Kıdemli Mimar",
                    ImageUrl = "/SeedData/Team-2.jpg",
                    Facebook = "https://facebook.com",
                    Instagram = "https://instagram.com",
                    Linkedin = "https://linkedin.com"
                },
                new Team
                {
                    TeamID = 3,
                    NameSurname = "Aslı Sönmez",
                    Title = "Dış Cephe ve Peyzaj Tasarımcısı",
                    ImageUrl = "/SeedData/Team-3.jpg",
                    Facebook = "https://facebook.com",
                    Instagram = "https://instagram.com",
                    Linkedin = "https://linkedin.com"
                },
                new Team
                {
                    TeamID = 4,
                    NameSurname = "Kübra Mecan",
                    Title = "Proje Müdürü",
                    ImageUrl = "/SeedData/Team-4.jpg",
                    Facebook = "https://facebook.com",
                    Instagram = "https://instagram.com",
                    Linkedin = "https://linkedin.com"
                }
            );

            modelBuilder.Entity<Testimonial>().HasData(
                new Testimonial
                {
                    TestimonialID = 1,
                    Name = "Samet Malkın",
                    Title = "Müşteri",
                    ImageUrl = "/SeedData/User-1.png",
                    Comment = "Tasarım ve mimarlık hizmeti veren birçok şirketle çalıştım ve siz bunların arasından gerçekten sıyrılan ve harika bir iş çıkaranlardan birisiniz.",
                    Status = TestimonialStatus.Confirmed
                },
                new Testimonial
                {
                    TestimonialID = 2,
                    Name = "Kübra Yalman",
                    Title = "Girişimci",
                    ImageUrl = "/SeedData/User-2.png",
                    Comment = "Birinci sınıf yaratıcılık ve kaliteli hizmet arıyordum ve ekibinizde aradığımı buldum. Tüm fikirlerimi ve taleplerimi dikkate aldınız ve harika bir proje ortaya çıkardınız.",
                    Status = TestimonialStatus.Confirmed
                }
            );

            modelBuilder.Entity<WorkProcess>().HasData(
                new WorkProcess
                {
                    WorkProcessID = 1,
                    Info = "Müşteri ile tanışma",
                    Title = "Hedefleri karşılayın ve tanımlayın",
                    SubTitle = "Yaptığımız ilk şey müşterilerimizle bir araya gelip gelecekteki bir projedeki hedeflerini konuşmaktır. Bu toplantı sırasında fikirlerinizi iletmekten ve bolca soru sormaktan çekinmeyin. Bu aşama oldukça belirleyicidir çünkü potansiyel mimarınızın çalışmalarını portföylerine göz atarak değerlendirebilirsiniz. Bir müşteri olarak mimarın ihtiyaçlarınızı dinleyip dinlemediğini ve bunları anlayıp anlamadığını da değerlendirebilirsiniz.",
                    ImageUrl = "/SeedData/WorkProcess-1.png",
                    IsActive = true
                },
                new WorkProcess
                {
                    WorkProcessID = 2,
                    Info = "Proje Konsept Geliştirme",
                    Title = "Konsept Üzerinde Çalışma",
                    SubTitle = "İşbirliğimizin bir sonraki adımı, gelecekteki evinizin konseptini geliştirmektir. Evinizin inşaat sürecini başarılı kılan her bir faktörü tanımlamamıza yardımcı olur. Tasarımcı ve mimar ekibimiz, nihai sonucun yalnızca gereksinimlerinizi değil aynı zamanda uluslararası inşaat ve güvenlik standartlarını da karşılamasını sağlamak için projenin her bir adımını planlamalıdır. İzleme ve kontrol bu noktada başlar.",
                    ImageUrl = "/SeedData/WorkProcess-2.png",
                    IsActive = true
                },
                new WorkProcess
                {
                    WorkProcessID = 3,
                    Info = "İç ve Dış Mekanda Çalışma",
                    Title = "Evinizi İnşa Etme",
                    SubTitle = "Bir ev inşa etmenin en önemli ve sorumlu kısmının inşaat süreci olduğuna şüphe yok. Güvenilir müteahhitlerle çalıştığımız için harika bir sonuç garantilidir. Bu aşama, inşaat alanını hazırlamaktan izolasyonu kurmaya ve alçıpanı tamamlamaya ve dış cephede çalışmaya kadar kontrol edilmesi gereken çeşitli görevleri içerdiğinden en karmaşık olanlardan biridir.",
                    ImageUrl = "/SeedData/WorkProcess-3.png",
                    IsActive = true
                },
                new WorkProcess
                {
                    WorkProcessID = 4,
                    Info = "Gelecekteki eviniz için son rötuşlar",
                    Title = "Projenin Tamamlanması",
                    SubTitle = "Proje son aşamasına geldiğinde, kalite kontrol ekibimiz her şeyin doğru şekilde yapıldığından emin olmak için binanın son kontrolünü gerçekleştirir. Çalışanlarımız ayrıca bu son adımda tüm iç elemanların ve armatürlerin doğru şekilde monte edildiğinden emin olacaktır. Her şey tamamlandıktan sonra, müşterimizi nihai sonucu değerlendirmeye ve projemizin kaliteli performansını deneyimlemeye davet ediyoruz.",
                    ImageUrl = "/SeedData/WorkProcess-4.png",
                    IsActive = true
                }
            );
        }


    }
}
