import { generateWebsiteBlueprint, processConversationalInstruction, INDUSTRY_PRESETS } from '../src/services/aiEngine'; import { BusinessProfile } from '../src/types'; console.log('--- TEST 1: GENERATE BLUEPRINT SECTION 0 ---'); const poolPreset = INDUSTRY_PRESETS['pool-service']; const profile: BusinessProfile = { companyName: 'Crystal Clear Pools', phone: '(661) 555-1234', email: 'test@aipilots.site', address: '123 Main St', city: 'Valencia', state: 'CA', zip: '91355', industry: 'Pool Service', tagline: 'Crystal Clear Always', yearsInBusiness: '10', services: ['Pool Cleaning', 'Pump Repair'], emergencyService: true, theme: 'titan-navy', }; const sections = generateWebsiteBlueprint(profile); console.log('Total sections generated:', sections.length); const sec0 = sections.find(s => s.sectionNumber === 0); console.log('Section 0 found:', !!sec0); console.log('Section 0 title:', sec0?.title); console.log('Section 0 variant:', sec0?.content.headerVariant); console.log('Section 0 announcement:', sec0?.content.topBarAnnouncement); console.log('Section 0 CTA:', sec0?.content.headerCtaText); if (!sec0 || sec0.sectionNumber !== 0 || sec0.type !== 'header') { throw new Error('Section 0 failed blueprint check'); } console.log('\n--- TEST 2: AI INSTRUCTION -> 5-STAR CLEAN HEADER ---'); const resModern = processConversationalInstruction('make the header modern clean with 5-star rating', sections, profile); const modSec0 = resModern.updatedSections.find(s => s.sectionNumber === 0); console.log('AI Response:', resModern.aiResponse); console.log('Updated Variant:', modSec0?.content.headerVariant); console.log('Updated Announcement:', modSec0?.content.topBarAnnouncement); console.log('Updated CTA:', modSec0?.content.headerCtaText); if (modSec0?.content.headerVariant !== 'modern-clean') { throw new Error('Modern clean header update failed'); } console.log('\n--- TEST 3: AI INSTRUCTION -> EMERGENCY DISPATCH HEADER ---'); const resEmerg = processConversationalInstruction('make the header emergency dispatch with 24/7 response', resModern.updatedSections, profile); const emergSec0 = resEmerg.updatedSections.find(s => s.sectionNumber === 0); console.log('AI Response:', resEmerg.aiResponse); console.log('Updated Variant:', emergSec0?.content.headerVariant); if (emergSec0?.content.headerVariant !== 'emergency-trade') { throw new Error('Emergency header update failed'); } console.log('\n--- TEST 4: CUSTOM LICENSE AND TOP BAR TOGGLE ---'); const resLic = processConversationalInstruction('set header license to lic #C-53-998811', emergSec0 ? [emergSec0, ...sections.slice(1)] : sections, profile); const licSec0 = resLic.updatedSections.find(s => s.sectionNumber === 0); console.log('License badge:', licSec0?.content.licenseBadge); console.log('\n--- TEST 5: USER EXACT PROMPT "ok i need a green and black landscaping app" ---'); const resLandscaping = processConversationalInstruction('ok i need a green and black landscaping app', sections, profile); console.log('AI Response:', resLandscaping.aiResponse); console.log('Updated Industry:', resLandscaping.updatedProfile?.industry); console.log('Updated Company:', resLandscaping.updatedProfile?.companyName); console.log('Updated Theme:', resLandscaping.updatedTheme); const heroSec = resLandscaping.updatedSections.find(s => s.sectionNumber === 1); console.log('Hero Headline:', heroSec?.content.headline); if (!resLandscaping.updatedProfile?.industry?.includes('Landscaping')) { throw new Error('Expected industry to contain Landscaping'); } if (!heroSec?.content.headline?.toLowerCase().includes('landscape') && !heroSec?.content.headline?.toLowerCase().includes('outdoor')) { throw new Error('Expected hero headline to be about landscaping'); } console.log('\n--- TEST 6: USER FOLLOWUP PROMPT "it didnt change the wording to landscapping" ---'); const resTypo = processConversationalInstruction('it didnt change the wording to landscapping', sections, profile); console.log('AI Response:', resTypo.aiResponse); console.log('Updated Industry:', resTypo.updatedProfile?.industry); console.log('Updated Company:', resTypo.updatedProfile?.companyName); if (!resTypo.updatedProfile?.industry?.includes('Landscaping')) { throw new Error('Expected typo landscapping to trigger landscaping overhaul'); } console.log('\nALL 6 TESTS PASSED PERFECTLY!');