-- =============================================
-- Script: Insert SEO Config Keys for LADA Express
-- Description: Thêm các config keys cho hệ thống SEO
-- Author: Development Team
-- Date: 01/11/2025
-- Version: 1.0
-- =============================================

-- Lưu ý: Script này sử dụng MERGE để tránh duplicate keys
-- Nếu key đã tồn tại, sẽ UPDATE giá trị
-- Nếu key chưa tồn tại, sẽ INSERT mới

SET NOCOUNT ON;

DECLARE @Now DATETIMEOFFSET = SYSDATETIMEOFFSET();
DECLARE @SystemUser INT = 0;
DECLARE @SystemUserName NVARCHAR(155) = N'SYSTEM';

BEGIN TRANSACTION;

BEGIN TRY

    -- =============================================
    -- 1. BASE CONFIGURATION (Cấu hình cơ bản)
    -- =============================================
    
    MERGE INTO AppConfig AS Target
    USING (VALUES
    (N'SEO.BaseUrl', N'https://ladaexpress.vn', N'URL gốc của website'),
    (N'SEO.DefaultImage', N'/images/logo.svg', N'Đường dẫn hình ảnh mặc định khi không có hình')
    ) AS Source ([Key], [Value], [Description])
    ON Target.[Key] = Source.[Key]
    WHEN MATCHED THEN 
        UPDATE SET 
            [Value] = Source.[Value],
            [Description] = Source.[Description],
            UpdatedTime = @Now,
            UpdatedBy = @SystemUser,
            UpdatedByUserName = @SystemUserName
    WHEN NOT MATCHED THEN
        INSERT ([Key], [Value], [Description], CreatedTime, CreatedBy, CreatedByUserName, UpdatedTime, UpdatedBy, UpdatedByUserName, IsDeleted)
        VALUES (Source.[Key], Source.[Value], Source.[Description], @Now, @SystemUser, @SystemUserName, @Now, @SystemUser, @SystemUserName, 0);

    -- =============================================
    -- 2. HOME PAGE SEO (SEO trang chủ)
    -- =============================================
    
    MERGE INTO AppConfig AS Target
    USING (VALUES
    (N'SEO.HomePage.Title', N'LADA Express - Gửi hàng dễ dàng', N'Tiêu đề trang chủ (Title tag)'),
    (N'SEO.HomePage.Description', N'LADA Express cung cấp dịch vụ gửi hàng nhanh chóng, uy tín trên toàn quốc. Cam kết giao hàng đúng hẹn, giá cả hợp lý. Liên hệ ngay để được tư vấn!', N'Mô tả trang chủ (Meta description)'),
    (N'SEO.HomePage.Keywords', N'gửi hàng, chuyển phát nhanh, vận chuyển, LADA Express, giao hàng', N'Từ khóa trang chủ (Meta keywords)'),
    (N'SEO.HomePage.OgTitle', N'LADA Express - Dịch vụ gửi hàng hàng đầu Việt Nam', N'Open Graph title cho trang chủ (dùng khi share Facebook)'),
    (N'SEO.HomePage.OgDescription', N'Dịch vụ gửi hàng nhanh chóng, uy tín. Giao hàng toàn quốc, cam kết đúng hẹn.', N'Open Graph description cho trang chủ'),
    (N'SEO.HomePage.TwitterTitle', N'LADA Express - Gửi hàng nhanh chóng', N'Twitter Card title cho trang chủ'),
    (N'SEO.HomePage.TwitterDescription', N'Dịch vụ gửi hàng uy tín, giao hàng toàn quốc', N'Twitter Card description cho trang chủ')
    ) AS Source ([Key], [Value], [Description])
    ON Target.[Key] = Source.[Key]
    WHEN MATCHED THEN 
        UPDATE SET 
            [Value] = Source.[Value],
            [Description] = Source.[Description],
            UpdatedTime = @Now,
            UpdatedBy = @SystemUser,
            UpdatedByUserName = @SystemUserName
    WHEN NOT MATCHED THEN
        INSERT ([Key], [Value], [Description], CreatedTime, CreatedBy, CreatedByUserName, UpdatedTime, UpdatedBy, UpdatedByUserName, IsDeleted)
        VALUES (Source.[Key], Source.[Value], Source.[Description], @Now, @SystemUser, @SystemUserName, @Now, @SystemUser, @SystemUserName, 0);

    -- =============================================
    -- 3. NEWS/ARTICLE SEO (SEO tin tức/bài viết)
    -- =============================================
    
    MERGE INTO AppConfig AS Target
    USING (VALUES
    (N'SEO.News.TitleTemplate', N'{title} - Tin tức LADA Express', N'Template cho tiêu đề bài viết tin tức. Variables: {title}, {category}, {author}, {date}'),
    (N'SEO.News.DescriptionTemplate', N'{description} Cập nhật tin tức mới nhất từ LADA Express.', N'Template cho mô tả bài viết tin tức. Variables: {description}, {title}, {author}, {date}'),
    (N'SEO.News.KeywordsTemplate', N'{keywords}, tin tức vận chuyển, LADA Express', N'Template cho từ khóa bài viết tin tức. Variables: {keywords}, {title}, {category}'),
    (N'SEO.News.DefaultKeywords', N'tin tức vận chuyển, LADA Express, logistics', N'Từ khóa mặc định cho tin tức khi không có keywords riêng'),
    (N'SEO.News.OgType', N'article', N'Open Graph type cho bài viết tin tức. Giá trị hợp lệ: article, blog, news'),
    (N'SEO.News.DefaultAuthor', N'LADA Express', N'Tên tác giả mặc định khi không có thông tin tác giả'),
    (N'SEO.News.PublisherName', N'LADA Express', N'Tên nhà xuất bản (cho Structured Data)')
    ) AS Source ([Key], [Value], [Description])
    ON Target.[Key] = Source.[Key]
    WHEN MATCHED THEN 
        UPDATE SET 
            [Value] = Source.[Value],
            [Description] = Source.[Description],
            UpdatedTime = @Now,
            UpdatedBy = @SystemUser,
            UpdatedByUserName = @SystemUserName
    WHEN NOT MATCHED THEN
        INSERT ([Key], [Value], [Description], CreatedTime, CreatedBy, CreatedByUserName, UpdatedTime, UpdatedBy, UpdatedByUserName, IsDeleted)
        VALUES (Source.[Key], Source.[Value], Source.[Description], @Now, @SystemUser, @SystemUserName, @Now, @SystemUser, @SystemUserName, 0);

    -- =============================================
    -- 4. PRODUCT/SERVICE SEO (SEO sản phẩm/dịch vụ)
    -- =============================================
    
    MERGE INTO AppConfig AS Target
    USING (VALUES
    (N'SEO.Product.TitleTemplate', N'{title} - LADA Express', N'Template cho tiêu đề sản phẩm/dịch vụ. Variables: {title}, {category}, {price}'),
    (N'SEO.Product.DescriptionTemplate', N'{description} Liên hệ LADA Express để được tư vấn và báo giá tốt nhất.', N'Template cho mô tả sản phẩm/dịch vụ. Variables: {description}, {title}, {price}'),
    (N'SEO.Product.KeywordsTemplate', N'{title}, dịch vụ vận chuyển, LADA Express', N'Template cho từ khóa sản phẩm/dịch vụ. Variables: {title}, {category}, {keywords}'),
    (N'SEO.Product.DefaultKeywords', N'dịch vụ vận chuyển, gửi hàng, LADA Express', N'Từ khóa mặc định cho sản phẩm/dịch vụ'),
    (N'SEO.Product.OgType', N'product', N'Open Graph type cho sản phẩm/dịch vụ. Giá trị hợp lệ: product, service')
    ) AS Source ([Key], [Value], [Description])
    ON Target.[Key] = Source.[Key]
    WHEN MATCHED THEN 
        UPDATE SET 
            [Value] = Source.[Value],
            [Description] = Source.[Description],
            UpdatedTime = @Now,
            UpdatedBy = @SystemUser,
            UpdatedByUserName = @SystemUserName
    WHEN NOT MATCHED THEN
        INSERT ([Key], [Value], [Description], CreatedTime, CreatedBy, CreatedByUserName, UpdatedTime, UpdatedBy, UpdatedByUserName, IsDeleted)
        VALUES (Source.[Key], Source.[Value], Source.[Description], @Now, @SystemUser, @SystemUserName, @Now, @SystemUser, @SystemUserName, 0);

    -- =============================================
    -- 5. CATEGORY SEO (SEO danh mục)
    -- =============================================
    
    MERGE INTO AppConfig AS Target
    USING (VALUES
    (N'SEO.Category.TitleTemplate', N'{title} - Danh mục dịch vụ LADA Express', N'Template cho tiêu đề danh mục. Variables: {title}, {description}, {count}'),
    (N'SEO.Category.DescriptionTemplate', N'{description} Khám phá các dịch vụ vận chuyển của LADA Express.', N'Template cho mô tả danh mục. Variables: {description}, {title}, {count}'),
    (N'SEO.Category.KeywordsTemplate', N'{title}, danh mục dịch vụ, LADA Express', N'Template cho từ khóa danh mục. Variables: {title}, {keywords}, {description}'),
    (N'SEO.Category.DefaultKeywords', N'danh mục dịch vụ, vận chuyển, LADA Express', N'Từ khóa mặc định cho danh mục'),
    (N'SEO.Category.OgType', N'website', N'Open Graph type cho danh mục. Giá trị hợp lệ: website, collection')
    ) AS Source ([Key], [Value], [Description])
    ON Target.[Key] = Source.[Key]
    WHEN MATCHED THEN 
        UPDATE SET 
            [Value] = Source.[Value],
            [Description] = Source.[Description],
            UpdatedTime = @Now,
            UpdatedBy = @SystemUser,
            UpdatedByUserName = @SystemUserName
    WHEN NOT MATCHED THEN
        INSERT ([Key], [Value], [Description], CreatedTime, CreatedBy, CreatedByUserName, UpdatedTime, UpdatedBy, UpdatedByUserName, IsDeleted)
        VALUES (Source.[Key], Source.[Value], Source.[Description], @Now, @SystemUser, @SystemUserName, @Now, @SystemUser, @SystemUserName, 0);

    -- =============================================
    -- 6. JOB POST SEO (SEO tuyển dụng)
    -- =============================================
    
    MERGE INTO AppConfig AS Target
    USING (VALUES
    (N'SEO.JobPost.TitleTemplate', N'{title} - Tuyển dụng LADA Express', N'Template cho tiêu đề tin tuyển dụng. Variables: {title}, {location}, {type}, {salary}'),
    (N'SEO.JobPost.DescriptionTemplate', N'{description} Ứng tuyển ngay tại LADA Express.', N'Template cho mô tả tin tuyển dụng. Variables: {description}, {title}, {location}, {salary}'),
    (N'SEO.JobPost.KeywordsTemplate', N'{title}, tuyển dụng, việc làm, LADA Express', N'Template cho từ khóa tin tuyển dụng. Variables: {title}, {location}, {type}, {keywords}'),
    (N'SEO.JobPost.DefaultKeywords', N'tuyển dụng, việc làm logistics, LADA Express', N'Từ khóa mặc định cho tin tuyển dụng'),
    (N'SEO.JobPost.OgType', N'article', N'Open Graph type cho tin tuyển dụng. Giá trị hợp lệ: article, job')
    ) AS Source ([Key], [Value], [Description])
    ON Target.[Key] = Source.[Key]
    WHEN MATCHED THEN 
        UPDATE SET 
            [Value] = Source.[Value],
            [Description] = Source.[Description],
            UpdatedTime = @Now,
            UpdatedBy = @SystemUser,
            UpdatedByUserName = @SystemUserName
    WHEN NOT MATCHED THEN
        INSERT ([Key], [Value], [Description], CreatedTime, CreatedBy, CreatedByUserName, UpdatedTime, UpdatedBy, UpdatedByUserName, IsDeleted)
        VALUES (Source.[Key], Source.[Value], Source.[Description], @Now, @SystemUser, @SystemUserName, @Now, @SystemUser, @SystemUserName, 0);

    -- =============================================
    -- 7. TAG/LABEL SEO (SEO thẻ/nhãn)
    -- =============================================
    
    MERGE INTO AppConfig AS Target
    USING (VALUES
    (N'SEO.Tag.TitleTemplate', N'{title} - LADA Express', N'Template cho tiêu đề tag. Variables: {title}, {count}, {description}'),
    (N'SEO.Tag.DescriptionTemplate', N'Xem tất cả nội dung về {title} tại LADA Express.', N'Template cho mô tả tag. Variables: {title}, {count}, {description}'),
    (N'SEO.Tag.KeywordsTemplate', N'{title}, LADA Express', N'Template cho từ khóa tag. Variables: {title}, {keywords}'),
    (N'SEO.Tag.DefaultKeywords', N'LADA Express, vận chuyển', N'Từ khóa mặc định cho tag'),
    (N'SEO.Tag.OgType', N'website', N'Open Graph type cho tag. Giá trị hợp lệ: website, collection')
    ) AS Source ([Key], [Value], [Description])
    ON Target.[Key] = Source.[Key]
    WHEN MATCHED THEN 
        UPDATE SET 
            [Value] = Source.[Value],
            [Description] = Source.[Description],
            UpdatedTime = @Now,
            UpdatedBy = @SystemUser,
            UpdatedByUserName = @SystemUserName
    WHEN NOT MATCHED THEN
        INSERT ([Key], [Value], [Description], CreatedTime, CreatedBy, CreatedByUserName, UpdatedTime, UpdatedBy, UpdatedByUserName, IsDeleted)
        VALUES (Source.[Key], Source.[Value], Source.[Description], @Now, @SystemUser, @SystemUserName, @Now, @SystemUser, @SystemUserName, 0);

    -- =============================================
    -- 8. ORGANIZATION INFO (Thông tin tổ chức)
    -- LƯU Ý: CẬP NHẬT GIÁ TRỊ THẬT CỦA CÔNG TY
    -- =============================================
    
    MERGE INTO AppConfig AS Target
    USING (VALUES
    (N'SEO.Organization.Name', N'LADA Express', N'Tên công ty/tổ chức'),
    (N'SEO.Organization.Url', N'https://ladaexpress.vn', N'URL chính thức của tổ chức'),
    (N'SEO.Organization.Logo', N'https://ladaexpress.vn/images/logo.png', N'URL logo của tổ chức (phải là URL đầy đủ, ảnh tối thiểu 112x112px)'),
    (N'SEO.Organization.Type', N'Organization', N'Loại tổ chức theo Schema.org. Giá trị hợp lệ: Organization, LocalBusiness, Corporation'),
    (N'SEO.Organization.Address.Street', N'[CẬP NHẬT ĐỊA CHỈ ĐƯỜNG PHỐ]', N'Địa chỉ đường phố. VD: 123 Đường Nguyễn Văn Linh'),
    (N'SEO.Organization.Address.Locality', N'[CẬP NHẬT THÀNH PHỐ]', N'Thành phố/địa phương. VD: Quận 7, TP. Hồ Chí Minh'),
    (N'SEO.Organization.Address.Region', N'[CẬP NHẬT TỈNH THÀNH]', N'Vùng/tỉnh thành. VD: Hồ Chí Minh'),
    (N'SEO.Organization.Address.PostalCode', N'[CẬP NHẬT MÃ BƯU ĐIỆN]', N'Mã bưu điện. VD: 700000'),
    (N'SEO.Organization.Address.Country', N'VN', N'Quốc gia (ISO 3166-1 alpha-2 code). VD: VN, US'),
    (N'SEO.Organization.Contact.Telephone', N'[CẬP NHẬT SỐ ĐIỆN THOẠI]', N'Số điện thoại liên hệ (định dạng quốc tế). VD: +84-123-456-789'),
    (N'SEO.Organization.Contact.Email', N'[CẬP NHẬT EMAIL]', N'Email liên hệ chính thức. VD: contact@ladaexpress.vn')
    ) AS Source ([Key], [Value], [Description])
    ON Target.[Key] = Source.[Key]
    WHEN MATCHED THEN 
        UPDATE SET 
            [Value] = Source.[Value],
            [Description] = Source.[Description],
            UpdatedTime = @Now,
            UpdatedBy = @SystemUser,
            UpdatedByUserName = @SystemUserName
    WHEN NOT MATCHED THEN
        INSERT ([Key], [Value], [Description], CreatedTime, CreatedBy, CreatedByUserName, UpdatedTime, UpdatedBy, UpdatedByUserName, IsDeleted)
        VALUES (Source.[Key], Source.[Value], Source.[Description], @Now, @SystemUser, @SystemUserName, @Now, @SystemUser, @SystemUserName, 0);

    -- =============================================
    -- 9. SOCIAL MEDIA (Mạng xã hội)
    -- LƯU Ý: CẬP NHẬT LINK MẠNG XÃ HỘI THẬT
    -- =============================================
    
    MERGE INTO AppConfig AS Target
    USING (VALUES
    (N'SEO.Organization.SocialMedia.Facebook', N'[CẬP NHẬT URL FACEBOOK]', N'URL trang Facebook chính thức. VD: https://www.facebook.com/ladaexpress'),
    (N'SEO.Organization.SocialMedia.Twitter', N'[CẬP NHẬT URL TWITTER]', N'URL trang Twitter/X chính thức. VD: https://twitter.com/ladaexpress'),
    (N'SEO.Organization.SocialMedia.LinkedIn', N'[CẬP NHẬT URL LINKEDIN]', N'URL trang LinkedIn chính thức. VD: https://www.linkedin.com/company/ladaexpress'),
    (N'SEO.Organization.SocialMedia.Instagram', N'[CẬP NHẬT URL INSTAGRAM]', N'URL trang Instagram chính thức. VD: https://www.instagram.com/ladaexpress'),
    (N'SEO.Organization.SocialMedia.YouTube', N'[CẬP NHẬT URL YOUTUBE]', N'URL kênh YouTube chính thức. VD: https://www.youtube.com/c/ladaexpress')
    ) AS Source ([Key], [Value], [Description])
    ON Target.[Key] = Source.[Key]
    WHEN MATCHED THEN 
        UPDATE SET 
            [Value] = Source.[Value],
            [Description] = Source.[Description],
            UpdatedTime = @Now,
            UpdatedBy = @SystemUser,
            UpdatedByUserName = @SystemUserName
    WHEN NOT MATCHED THEN
        INSERT ([Key], [Value], [Description], CreatedTime, CreatedBy, CreatedByUserName, UpdatedTime, UpdatedBy, UpdatedByUserName, IsDeleted)
        VALUES (Source.[Key], Source.[Value], Source.[Description], @Now, @SystemUser, @SystemUserName, @Now, @SystemUser, @SystemUserName, 0);

    -- =============================================
    -- 10. SERVICE CONFIGURATION (Cấu hình dịch vụ)
    -- =============================================
    
    MERGE INTO AppConfig AS Target
    USING (VALUES
    (N'SEO.Service.Currency', N'VND', N'Đơn vị tiền tệ cho giá dịch vụ (ISO 4217). Giá trị hợp lệ: VND, USD, EUR'),
    (N'SEO.Service.AreaServed', N'Việt Nam', N'Khu vực phục vụ. VD: Việt Nam, TP. Hồ Chí Minh, Toàn quốc'),
    (N'SEO.Service.AvailableChannel', N'Hotline, Website, Email', N'Các kênh liên hệ có sẵn')
    ) AS Source ([Key], [Value], [Description])
    ON Target.[Key] = Source.[Key]
    WHEN MATCHED THEN 
        UPDATE SET 
            [Value] = Source.[Value],
            [Description] = Source.[Description],
            UpdatedTime = @Now,
            UpdatedBy = @SystemUser,
            UpdatedByUserName = @SystemUserName
    WHEN NOT MATCHED THEN
        INSERT ([Key], [Value], [Description], CreatedTime, CreatedBy, CreatedByUserName, UpdatedTime, UpdatedBy, UpdatedByUserName, IsDeleted)
        VALUES (Source.[Key], Source.[Value], Source.[Description], @Now, @SystemUser, @SystemUserName, @Now, @SystemUser, @SystemUserName, 0);

    -- =============================================
    -- 11. JOB CONFIGURATION (Cấu hình tuyển dụng)
    -- =============================================
    
    MERGE INTO AppConfig AS Target
    USING (VALUES
    (N'SEO.Job.Currency', N'VND', N'Đơn vị tiền tệ cho lương (ISO 4217). Giá trị hợp lệ: VND, USD, EUR'),
    (N'SEO.Job.EmploymentType', N'FULL_TIME', N'Loại hình công việc mặc định. Giá trị hợp lệ: FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN')
    ) AS Source ([Key], [Value], [Description])
    ON Target.[Key] = Source.[Key]
    WHEN MATCHED THEN 
        UPDATE SET 
            [Value] = Source.[Value],
            [Description] = Source.[Description],
            UpdatedTime = @Now,
            UpdatedBy = @SystemUser,
            UpdatedByUserName = @SystemUserName
    WHEN NOT MATCHED THEN
        INSERT ([Key], [Value], [Description], CreatedTime, CreatedBy, CreatedByUserName, UpdatedTime, UpdatedBy, UpdatedByUserName, IsDeleted)
        VALUES (Source.[Key], Source.[Value], Source.[Description], @Now, @SystemUser, @SystemUserName, @Now, @SystemUser, @SystemUserName, 0);

    COMMIT TRANSACTION;
    
    PRINT '✓ Đã insert/update thành công ' + CAST(@@ROWCOUNT AS NVARCHAR(10)) + ' config keys';
    PRINT '✓ Script hoàn tất!';
    PRINT '';
    PRINT '⚠ LƯU Ý: Vui lòng cập nhật các giá trị sau với thông tin thật của công ty:';
    PRINT '  - SEO.Organization.Address.Street';
    PRINT '  - SEO.Organization.Address.Locality';
    PRINT '  - SEO.Organization.Address.Region';
    PRINT '  - SEO.Organization.Address.PostalCode';
    PRINT '  - SEO.Organization.Contact.Telephone';
    PRINT '  - SEO.Organization.Contact.Email';
    PRINT '  - SEO.Organization.SocialMedia.* (tất cả các link mạng xã hội)';

END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
    
    DECLARE @ErrorMessage NVARCHAR(4000) = ERROR_MESSAGE();
    DECLARE @ErrorSeverity INT = ERROR_SEVERITY();
    DECLARE @ErrorState INT = ERROR_STATE();
    
    PRINT '✗ Lỗi khi thực thi script:';
    RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);
END CATCH;

GO

-- =============================================
-- QUERY ĐỂ XEM KẾT QUẢ
-- =============================================

-- Xem tất cả config keys đã insert
SELECT
    Id,
    [Key],
    [Value],
    [Description],
    CreatedTime,
    UpdatedTime,
    IsDeleted
FROM AppConfig
WHERE [Key] LIKE 'SEO.%'
ORDER BY [Key];

-- Đếm số lượng config keys theo nhóm
SELECT
    CASE 
        WHEN [Key] LIKE 'SEO.HomePage.%' THEN 'Home Page'
        WHEN [Key] LIKE 'SEO.News.%' THEN 'News/Article'
        WHEN [Key] LIKE 'SEO.Product.%' THEN 'Product/Service'
        WHEN [Key] LIKE 'SEO.Category.%' THEN 'Category'
        WHEN [Key] LIKE 'SEO.JobPost.%' THEN 'Job Post'
        WHEN [Key] LIKE 'SEO.Tag.%' THEN 'Tag/Label'
        WHEN [Key] LIKE 'SEO.Organization.%' THEN 'Organization Info'
        WHEN [Key] LIKE 'SEO.Service.%' THEN 'Service Config'
        WHEN [Key] LIKE 'SEO.Job.%' THEN 'Job Config'
        WHEN [Key] IN ('SEO.BaseUrl', 'SEO.DefaultImage') THEN 'Base Config'
        ELSE 'Other'
    END AS [Group],
    COUNT(*) AS [Count]
FROM AppConfig
WHERE [Key] LIKE 'SEO.%'
GROUP BY 
    CASE 
        WHEN [Key] LIKE 'SEO.HomePage.%' THEN 'Home Page'
        WHEN [Key] LIKE 'SEO.News.%' THEN 'News/Article'
        WHEN [Key] LIKE 'SEO.Product.%' THEN 'Product/Service'
        WHEN [Key] LIKE 'SEO.Category.%' THEN 'Category'
        WHEN [Key] LIKE 'SEO.JobPost.%' THEN 'Job Post'
        WHEN [Key] LIKE 'SEO.Tag.%' THEN 'Tag/Label'
        WHEN [Key] LIKE 'SEO.Organization.%' THEN 'Organization Info'
        WHEN [Key] LIKE 'SEO.Service.%' THEN 'Service Config'
        WHEN [Key] LIKE 'SEO.Job.%' THEN 'Job Config'
        WHEN [Key] IN ('SEO.BaseUrl', 'SEO.DefaultImage') THEN 'Base Config'
        ELSE 'Other'
    END
ORDER BY [Group];

