using Microsoft.EntityFrameworkCore;
using PowderCoating.Core.Entities;
namespace PowderCoating.Infrastructure.Services;
public partial class SeedDataService
{
///
/// Seeds the global set of powder-coat manufacturer URL patterns used by the AI inventory
/// lookup service to construct direct product-page links (e.g. a Prismatic Powders color
/// page from a part number + color name).
///
///
///
/// These records use CompanyId = 0 (a sentinel value meaning "platform-wide") rather
/// than a specific tenant ID, so a single set of patterns is shared across all companies.
/// The global query filter that restricts queries to the current tenant's CompanyId
/// does not apply here; IgnoreQueryFilters() is used for the existence check so the
/// count includes records belonging to any company including the platform-level 0.
///
///
/// Idempotency: returns 0 if any patterns already exist (regardless of which manufacturer)
/// rather than checking per-manufacturer, because the full set is always inserted together
/// and partial sets should not occur in practice.
///
///
/// ProductUrlTemplate is nullable; a null value (e.g. Powder Buy The Pound) tells
/// the lookup service to fall back to a search URL rather than a direct product page.
///
///
/// This method is public (unlike other seed helpers) because it is called from the
/// Platform Management → Seed Data page independently of company-scoped seed operations.
///
///
/// Number of patterns inserted, or 0 if patterns were already present.
public async Task SeedManufacturerPatternsAsync()
{
// Check if any patterns already exist (global records, CompanyId = 0)
var existingCount = await _context.Set()
.IgnoreQueryFilters()
.CountAsync(p => !p.IsDeleted);
if (existingCount > 0)
{
return 0; // Already seeded
}
var patterns = new List
{
new ManufacturerLookupPattern
{
ManufacturerName = "Prismatic Powders",
Domain = "prismaticpowders.com",
ProductUrlTemplate = "https://www.prismaticpowders.com/shop/powder-coating-colors/{partNumber}/{slug}",
SlugTransform = "LowerHyphen",
IsActive = true,
Notes = "Requires both part number and color name",
CompanyId = 0,
CreatedAt = DateTime.UtcNow
},
new ManufacturerLookupPattern
{
ManufacturerName = "Columbia Coatings",
Domain = "columbiacoatings.com",
ProductUrlTemplate = "https://www.columbiacoatings.com/product/{slug}/",
SlugTransform = "LowerHyphen",
IsActive = true,
Notes = "Color name slug only",
CompanyId = 0,
CreatedAt = DateTime.UtcNow
},
new ManufacturerLookupPattern
{
ManufacturerName = "All Powder Paints",
Domain = "allpowderpaints.com",
ProductUrlTemplate = "https://www.allpowderpaints.com/powder-coating-colors/{slug}/",
SlugTransform = "LowerHyphen",
IsActive = true,
Notes = "Color name slug only",
CompanyId = 0,
CreatedAt = DateTime.UtcNow
},
new ManufacturerLookupPattern
{
ManufacturerName = "Tiger Drylac",
Domain = "tiger-coatings.com",
ProductUrlTemplate = "https://www.tiger-coatings.com/us-en/shop/show/{partNumber}",
SlugTransform = "LowerHyphen",
IsActive = true,
Notes = "Part number required; normalize slashes to hyphens",
CompanyId = 0,
CreatedAt = DateTime.UtcNow
},
new ManufacturerLookupPattern
{
ManufacturerName = "Powder Buy The Pound",
Domain = "powderbuythepound.com",
ProductUrlTemplate = null,
SlugTransform = "LowerHyphen",
IsActive = true,
Notes = "Complex slug; domain used for search URL selection only",
CompanyId = 0,
CreatedAt = DateTime.UtcNow
}
};
await _context.Set().AddRangeAsync(patterns);
await _context.SaveChangesAsync();
return patterns.Count;
}
}