{"code":"var __defProp=Object.defineProperty;var __name=(target,value)=>__defProp(target,\"name\",{value,configurable:true});import express from\"express\";import cors from\"cors\";import pg from\"pg\";import dotenv from\"dotenv\";import path from\"path\";import{fileURLToPath}from\"url\";import{BedrockRuntimeClient,InvokeModelCommand}from\"@aws-sdk/client-bedrock-runtime\";import{createServer as createViteServer}from\"vite\";const __filename=fileURLToPath(import.meta.url);const __dirname=path.dirname(__filename);dotenv.config();if(!process.env.AWS_ACCESS_KEY_ID||!process.env.AWS_SECRET_ACCESS_KEY){console.warn(\"\\n\\u26A0\\uFE0F  WARNING: AWS Credentials missing in .env file!\");console.warn(\"   AI features will fail. Please set AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_REGION.\\n\")}const{Pool}=pg;const DEFAULT_PORT=5173;const PORT=Number(process.env.PORT)||DEFAULT_PORT;const app=express();app.use(cors());app.use(express.json({limit:\"50mb\"}));const getDbConfig=__name(()=>{if(process.env.DATABASE_URL){return{connectionString:process.env.DATABASE_URL,ssl:process.env.DB_SSL===\"true\"?{rejectUnauthorized:false}:void 0}}const config={user:process.env.DB_USER||process.env.PGUSER,password:process.env.DB_PASSWORD||process.env.PGPASSWORD,host:process.env.DB_HOST||process.env.PGHOST||\"localhost\",port:parseInt(process.env.DB_PORT||process.env.PGPORT||\"5432\"),database:process.env.DB_NAME||process.env.PGDATABASE,ssl:process.env.DB_SSL===\"true\"?{rejectUnauthorized:false}:void 0};if(config.password===void 0||config.password===null){console.warn(\"\\u26A0\\uFE0F  DB Warning: No password provided. Defaulting to empty string.\");config.password=\"\"}else{config.password=String(config.password)}return config},\"getDbConfig\");const dbConfig=getDbConfig();const dbHost=\"host\"in dbConfig?dbConfig.host:\"DATABASE_URL\";const dbPort=\"port\"in dbConfig?dbConfig.port:\"default\";console.log(`\\u{1F50C} Attempting DB Connection to: ${dbHost} on port ${dbPort}`);const pool=new Pool(dbConfig);pool.on(\"error\",err=>{console.error(\"Postgres pool error:\",err?.message||err)});const BARCODE_COLORS=[\"#C00000\",\"#203764\",\"#FFC000\",\"#FF0066\",\"#548235\",\"#008080\",\"#000000\",\"#833C0C\",\"#FF3300\",\"#7030A0\"];const DEFAULT_CUSTOMER_QUESTIONS=[{key:\"smell_attraction\",label:\"Which kind of smell pulls you in instantly?\",values:[\"Fresh & Clean\",\"Warm & Cozy\",\"Sweet & Gourmand\",\"Spicy & Bold\",\"Dark & Smoky\",\"Not sure yet\"],description:\"Your first instinct is one of the strongest predictors of long-term fragrance satisfaction.\",category:\"USER_DNA\",mode:\"QUICK\",sortOrder:10,required:true,helperText:\"Choose the scent family that feels immediately magnetic.\",curiosityPrompt:\"This tells AmeriFrag what your nose trusts before your brain starts overthinking.\",weight:1.4},{key:\"preferred_notes\",label:\"Which notes or accords do you usually love?\",values:[\"Citrus\",\"Floral\",\"Woody\",\"Vanilla\",\"Spicy\",\"Musky\",\"Mixed / Not sure\"],description:\"These are your memory-linked sensory anchors.\",category:\"USER_DNA\",mode:\"QUICK\",sortOrder:20,required:true,helperText:\"Pick the note family that feels most naturally \\u201Cyou.\\u201D\",curiosityPrompt:\"The more honest you are here, the smarter the recommendations become.\",weight:1.2},{key:\"desired_impression\",label:\"What impression should your fragrance leave?\",values:[\"Attractive / Seductive\",\"Professional / Clean\",\"Elegant / Classy\",\"Bold / Dominant\",\"Friendly / Soft\",\"Not decided\"],description:\"Fragrance is a social signal as much as it is a smell.\",category:\"USER_DNA\",mode:\"QUICK\",sortOrder:30,required:true,helperText:\"Think about how you want people to remember your presence.\",curiosityPrompt:\"We use this to balance scent chemistry with identity signaling.\",weight:1.2},{key:\"occasion\",label:\"Where are you most likely to wear this next?\",values:[\"Office / Daily\",\"Date\",\"Party\",\"Special Event\",\"Travel\",\"Everything\"],description:\"This captures why you are buying right now.\",category:\"NEED_DNA\",mode:\"QUICK\",sortOrder:40,required:true,helperText:\"Your next real-life use case matters more than generic preference tags.\",curiosityPrompt:\"Two people can love the same scent and still need very different recommendations.\",weight:1.1},{key:\"budget\",label:\"What price range feels right for this search?\",values:[\"Budget\",\"Mid\",\"Premium\",\"Luxury\",\"No limit\"],description:\"Price comfort helps the engine diversify without suggesting unrealistic picks.\",category:\"NEED_DNA\",mode:\"QUICK\",sortOrder:50,required:true,helperText:\"Be realistic. Better fit beats aspirational mismatch.\",curiosityPrompt:\"This is how we keep your recommendations sharp, not random.\",weight:.9},{key:\"signature_preference\",label:\"Do you prefer familiar scents or something unique?\",values:[\"Very Safe\",\"Slightly Unique\",\"Balanced\",\"Unique\",\"Very Experimental\"],description:\"This reflects your risk tolerance in self-expression.\",category:\"USER_DNA\",mode:\"DEEP\",sortOrder:60,required:true,helperText:\"This helps us place you between mass appeal and standout character.\",curiosityPrompt:\"Your risk profile is what separates a \\u201Csafe pick\\u201D from a \\u201Cperfect pick.\\u201D\",weight:1.1},{key:\"presence_level\",label:\"How strongly should your fragrance be noticed?\",values:[\"Skin scent\",\"Close\",\"Moderate\",\"Strong\",\"Very strong\"],description:\"Projection controls subtlety versus attention.\",category:\"USER_DNA\",mode:\"DEEP\",sortOrder:70,required:true,helperText:\"Think about how far you want the fragrance to travel.\",curiosityPrompt:\"This is one of the biggest reasons people love or regret a blind buy.\",weight:1.1},{key:\"emotional_effect\",label:\"How do you want to feel wearing it?\",values:[\"Relaxed\",\"Confident\",\"Energetic\",\"Romantic\",\"Powerful\"],description:\"This is the internal emotional driver behind scent preference.\",category:\"USER_DNA\",mode:\"DEEP\",sortOrder:80,required:true,helperText:\"This is about your internal feeling, not how others see you.\",curiosityPrompt:\"People often choose fragrances for emotion before they choose them for notes.\",weight:1.1},{key:\"temperature_preference\",label:\"Do you prefer fresher or warmer scent temperatures?\",values:[\"Very Fresh\",\"Slightly Fresh\",\"Balanced\",\"Slightly Warm\",\"Very Warm\"],description:\"Temperature preference aligns climate comfort with scent identity.\",category:\"USER_DNA\",mode:\"DEEP\",sortOrder:90,required:true,helperText:\"This helps us avoid recommending a fragrance that wears beautifully on paper but poorly on you.\",curiosityPrompt:\"Temperature fit is one of the hidden reasons fragrances feel \\u201Cmade for you.\\u201D\",weight:1},{key:\"scent_direction\",label:\"Which scent direction feels most natural to you?\",values:[\"Clean / Aquatic\",\"Woody / Earthy\",\"Sweet / Dessert-like\",\"Spicy / Oriental\",\"Floral\"],description:\"This maps your identity archetype.\",category:\"USER_DNA\",mode:\"DEEP\",sortOrder:100,required:true,helperText:\"Choose the world your ideal fragrance belongs to.\",curiosityPrompt:\"This helps the engine understand your deeper style language.\",weight:1},{key:\"segment_preference\",label:\"What kind of fragrance houses do you gravitate toward?\",values:[\"Designer\",\"Luxury\",\"Niche\",\"Celebrity\",\"No preference\"],description:\"This captures status versus value psychology.\",category:\"USER_DNA\",mode:\"DEEP\",sortOrder:110,required:true,helperText:\"This is not about price alone. It is about comfort zone and brand language.\",curiosityPrompt:\"Brand preference shapes how adventurous or familiar recommendations should feel.\",weight:.8},{key:\"rejection_triggers\",label:\"What do you want to avoid most?\",values:[\"Too sweet\",\"Too strong\",\"Too synthetic\",\"Too floral\",\"Too spicy\",\"No idea\"],description:\"Avoidance often predicts satisfaction better than desire.\",category:\"USER_DNA\",mode:\"DEEP\",sortOrder:120,required:true,helperText:\"Your no-go list matters as much as your wishlist.\",curiosityPrompt:\"This question often improves recommendations more than any other.\",weight:1.5},{key:\"time_of_use\",label:\"When does this fragrance need to come alive?\",values:[\"Day\",\"Night\",\"All day\"],description:\"This defines temporal suitability for current intent.\",category:\"NEED_DNA\",mode:\"DEEP\",sortOrder:130,required:true,helperText:\"A great daytime scent can be disappointing at night, and vice versa.\",curiosityPrompt:\"Timing is how we decide whether to push freshness, depth, or versatility.\",weight:.8},{key:\"versatility\",label:\"Do you want something situational or universal?\",values:[\"Daily\",\"Occasion\",\"Signature\"],description:\"This determines whether the engine optimizes for flexibility or impact.\",category:\"NEED_DNA\",mode:\"DEEP\",sortOrder:140,required:true,helperText:\"A signature scent and a special-event scent should not rank the same way.\",curiosityPrompt:\"This is where your recommendation path starts feeling custom instead of generic.\",weight:.8},{key:\"environment\",label:\"What environment will it mostly live in?\",values:[\"Hot\",\"Cold\",\"AC\",\"Outdoor\",\"Mixed\"],description:\"Climate and environment change how a fragrance performs on skin.\",category:\"NEED_DNA\",mode:\"DEEP\",sortOrder:150,required:true,helperText:\"Temperature and airflow can completely change how a fragrance behaves.\",curiosityPrompt:\"This is one of the hidden factors that makes recommendations feel eerily accurate.\",weight:.9},{key:\"format_strength\",label:\"Do you have a size or strength preference?\",values:[\"Small\",\"Medium\",\"Large\",\"Strong\",\"Light\"],description:\"This helps align packaging and wear style with the customer need.\",category:\"NEED_DNA\",mode:\"DEEP\",sortOrder:160,required:false,helperText:\"Use this if packaging size or concentration matters to you.\",curiosityPrompt:\"Small constraints like this often sharpen the final list dramatically.\",weight:.6},{key:\"brand_familiarity\",label:\"Would you rather explore or stay with names you know?\",values:[\"Known brands\",\"Explore new\",\"Both\"],description:\"This controls exploration versus safety in brand selection.\",category:\"NEED_DNA\",mode:\"DEEP\",sortOrder:170,required:false,helperText:\"This is how we decide whether to surprise you or reassure you.\",curiosityPrompt:\"The best recommendation engine knows when to comfort and when to challenge.\",weight:.7},{key:\"trend_preference\",label:\"Do you want classic, trending, or balanced choices?\",values:[\"Classic\",\"Trending\",\"Balanced\"],description:\"This tunes popularity bias in the final ranking.\",category:\"NEED_DNA\",mode:\"DEEP\",sortOrder:180,required:false,helperText:\"Trend preference helps us avoid recommending something that feels wrong for your taste timing.\",curiosityPrompt:\"This is where timelessness meets relevance.\",weight:.6},{key:\"performance_expectation\",label:\"What kind of performance profile do you expect?\",values:[\"Long lasting\",\"Strong projection\",\"Balanced\",\"Light\"],description:\"Performance expectation prevents beautiful but frustrating mismatches.\",category:\"NEED_DNA\",mode:\"DEEP\",sortOrder:190,required:true,helperText:\"If performance matters to you, the engine should know it explicitly.\",curiosityPrompt:\"This helps the AI avoid \\u201Cnice scent, wrong wear\\u201D mistakes.\",weight:1},{key:\"reference_fragrance\",label:\"Which fragrance do you already like most?\",values:[\"Bleu de Chanel\",\"Dior Sauvage\",\"Baccarat Rouge 540\",\"YSL Libre\",\"Tom Ford Ombre Leather\",\"Not sure\"],description:\"A familiar reference gives the engine a strong comparison anchor.\",category:\"NEED_DNA\",mode:\"DEEP\",sortOrder:200,required:false,helperText:\"Pick the closest anchor if you know one.\",curiosityPrompt:\"This lets AmeriFrag say \\u201Cif you love that, you may love this.\\u201D\",weight:.9}];let dbConnected=false;pool.connect().then(client=>{console.log(\"\\u2705 Database Connected Successfully\");dbConnected=true;client.release();initSchema()}).catch(err=>{dbConnected=false;console.error(\"\\u274C Database Connection Failed:\",err.message);console.error(\"   Hint: Ensure Postgres is running and .env credentials are correct.\")});const addLog=__name(async(level,source,message)=>{console.log(`[${level}] ${source}: ${message}`);if(!dbConnected)return;try{await pool.query(`INSERT INTO system_logs (level, source, message, timestamp) VALUES ($1, $2, $3, NOW())`,[level,source,message])}catch(e){console.error(\"Failed to write log to DB\",e.message)}},\"addLog\");const trackRecommendationEvent=__name(async(userId,productId,eventType,metadata={})=>{if(!dbConnected||!userId||!productId||!eventType)return;try{await pool.query(`INSERT INTO recommendation_events (user_id, product_id, event_type, metadata, created_at)\n       VALUES ($1, $2, $3, $4::jsonb, NOW())`,[userId,productId,eventType,JSON.stringify(metadata||{})])}catch(e){console.error(\"Failed to write recommendation event to DB\",e.message)}},\"trackRecommendationEvent\");const mapQuestionConfig=__name(row=>({key:row.key,label:row.label,values:Array.isArray(row.values)?row.values:JSON.parse(row.values||\"[]\"),description:row.description||\"\",category:row.category||\"USER_DNA\",mode:row.mode||\"DEEP\",sortOrder:row.sort_order??0,required:row.required??true,helperText:row.helper_text||\"\",curiosityPrompt:row.curiosity_prompt||\"\",weight:Number(row.weight??1),dependsOnKey:row.depends_on_key||\"\",dependsOnValue:row.depends_on_value||\"\"}),\"mapQuestionConfig\");const getQuestionConfigs=__name(async()=>{const result=await pool.query(\"SELECT * FROM customer_preference_config ORDER BY sort_order ASC, label ASC\");return result.rows.map(mapQuestionConfig)},\"getQuestionConfigs\");const getVisibleQuestions=__name((questions,preferences={})=>{return questions.filter(question=>{if(!question.dependsOnKey)return true;const answer=preferences[question.dependsOnKey];const selectedValue=Array.isArray(answer)?answer[0]:answer;if(!selectedValue)return false;if(!question.dependsOnValue)return true;return selectedValue===question.dependsOnValue})},\"getVisibleQuestions\");const computeQuestionnaireStatus=__name((questions,preferences={})=>{const visibleQuestions=getVisibleQuestions(questions,preferences);const quickQuestions=visibleQuestions.filter(question=>question.mode===\"QUICK\"||question.mode===\"BOTH\");const deepQuestions=visibleQuestions;const isAnswered=__name(question=>{const answer=preferences[question.key];return Array.isArray(answer)?answer.some(Boolean):Boolean(answer)},\"isAnswered\");const quickRequired=quickQuestions.filter(question=>question.required!==false);const deepRequired=deepQuestions.filter(question=>question.required!==false);const quickAnswered=quickRequired.filter(isAnswered).length;const deepAnswered=deepRequired.filter(isAnswered).length;const deepTotal=deepRequired.length;const quickTotal=quickRequired.length;const profileCompletion=deepTotal>0?Math.round(deepAnswered/deepTotal*100):100;return{quickTotal,quickAnswered,deepTotal,deepAnswered,profileCompletion,quickCompleted:quickAnswered>=quickTotal,deepCompleted:deepAnswered>=deepTotal,requiresOnboarding:quickAnswered<quickTotal}},\"computeQuestionnaireStatus\");const buildPreferenceText=__name((questions,preferences={})=>{return getVisibleQuestions(questions,preferences).map(question=>{const answer=preferences[question.key];if(!answer)return null;const value=Array.isArray(answer)?answer.join(\", \"):String(answer);return value?`${question.label}: ${value}`:null}).filter(Boolean).join(\". \")},\"buildPreferenceText\");const buildPersonalBarcode=__name((questions,preferences={})=>{const barcodeQuestions=getVisibleQuestions(questions.filter(question=>question.category===\"USER_DNA\"),preferences).filter(question=>{const answer=preferences[question.key];return Array.isArray(answer)?answer[0]:answer});if(barcodeQuestions.length===0){return{segments:[]}}const equalPercentage=Number((100/barcodeQuestions.length).toFixed(1));const segments=barcodeQuestions.map((question,index)=>({category:question.label,value:Array.isArray(preferences[question.key])?preferences[question.key][0]:preferences[question.key],percentage:equalPercentage,color:BARCODE_COLORS[index%BARCODE_COLORS.length]}));const total=segments.reduce((sum,segment)=>sum+segment.percentage,0);if(segments.length>0&&total!==100){const diff=Number((100-total).toFixed(1));segments[segments.length-1].percentage=Number((segments[segments.length-1].percentage+diff).toFixed(1))}return{segments}},\"buildPersonalBarcode\");const formatUser=__name(async userRow=>{const questions=await getQuestionConfigs();const preferences=userRow.preferences||{};return{id:userRow.id,name:userRow.name,email:userRow.email,role:userRow.role,storeName:userRow.store_name,avatarUrl:userRow.avatar_url,status:userRow.status,joinedAt:userRow.joined_at,phone:userRow.phone,address:userRow.address,preferences,personalBarcode:userRow.personal_barcode,questionnaireStatus:computeQuestionnaireStatus(questions,preferences)}},\"formatUser\");const isLegacyQuestionConfig=__name(rows=>{if(!rows||rows.length===0)return false;const legacyKeys=new Set([\"scent_style\",\"key_note\",\"conveyed_mood\",\"season\",\"occasion\",\"age_group\",\"fragrance_strength\",\"scent_life\",\"best_time_to_wear\",\"bottle_design\",\"gender\"]);return rows.some(row=>legacyKeys.has(row.key))||rows.every(row=>!row.category&&!row.mode&&!row.sort_order)},\"isLegacyQuestionConfig\");const replaceCustomerQuestions=__name(async(client,questions)=>{await client.query(\"DELETE FROM customer_preference_config\");for(const question of questions){await client.query(`INSERT INTO customer_preference_config (\n        key, label, values, description, category, mode, sort_order, required, helper_text, curiosity_prompt, weight, depends_on_key, depends_on_value\n      ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)`,[question.key,question.label,JSON.stringify(question.values||[]),question.description||\"\",question.category||\"USER_DNA\",question.mode||\"DEEP\",question.sortOrder??0,question.required??true,question.helperText||\"\",question.curiosityPrompt||\"\",question.weight??1,question.dependsOnKey||null,question.dependsOnValue||null])}},\"replaceCustomerQuestions\");const initSchema=__name(async()=>{if(!dbConnected){console.warn(\"\\u26A0\\uFE0F  Skipping Schema Initialization: Database not connected.\");return}try{const client=await pool.connect();try{await client.query(\"CREATE EXTENSION IF NOT EXISTS vector;\");console.log(\"\\u2705 pgvector extension enabled\")}catch(e){console.warn(\"\\u26A0\\uFE0F  Could not enable pgvector. Ensure it is installed on your Postgres server.\");console.warn(\"   Error: \"+e.message)}await client.query(`\n      CREATE TABLE IF NOT EXISTS ai_attribute_config (\n        key TEXT PRIMARY KEY,\n        label TEXT,\n        values JSONB DEFAULT '[]'::jsonb,\n        description TEXT\n      );\n    `);const attrCheck=await client.query(\"SELECT * FROM ai_attribute_config\");if(attrCheck.rows.length===0){const seedAttributes=[{key:\"style\",label:\"Style\",values:[\"Vintage\",\"Modern\",\"Bohemian\",\"Minimalist\",\"Classic\",\"Chic\",\"Artsy\",\"Sexy\",\"Casual\",\"Rocker\"]},{key:\"note\",label:\"Note\",values:[\"Citrus\",\"Floral\",\"Fruity\",\"Herbaceous\",\"Spicy\",\"Woody\",\"Amber\",\"Gourmand\",\"Oriental\",\"Aquatic\"]},{key:\"mood\",label:\"Mood\",values:[\"Romantic\",\"Energizing\",\"Calming\",\"Sensual\",\"Fresh\",\"Adventurous\",\"Playful\",\"Mysterious\",\"Confident\",\"Other\"]},{key:\"season\",label:\"Season\",values:[\"Spring\",\"Summer\",\"Autumn\",\"Winter\",\"Any Season\"]},{key:\"occasion\",label:\"Occasion\",values:[\"Dating\",\"Wedding\",\"Partying\",\"Professional\",\"Sports & Gym\",\"Travel\",\"Adventures\",\"Family Gathering\",\"Religious\",\"Any Occasion\"]},{key:\"age_group\",label:\"Age Group\",values:[\"Under 10\",\"10-16\",\"16-21\",\"21-30\",\"30-40\",\"40-50\",\"50-60\",\"60-70\",\"70-80\",\"Any Age\"]},{key:\"smell_intensity\",label:\"Smell Intensity\",values:[\"Negligible\",\"Faint\",\"Delicate\",\"Subtle\",\"Mild\",\"Moderate\",\"Balanced\",\"Strong\",\"Intense\",\"Unknown\"]},{key:\"longevity\",label:\"Longevity\",values:[\"Fleeting\",\"Short-lasting\",\"Moderate\",\"Lasting\",\"Half Day\",\"Extended\",\"All-day\",\"Enduring\",\"Persistent\",\"Indomitable\"]},{key:\"spray_time\",label:\"Spray Time\",values:[\"Morning\",\"Daytime\",\"Lunchtime\",\"Afternoon\",\"Evening\",\"Dinnertime\",\"Night\",\"Late Night\",\"Bedtime\",\"Any Time\"]},{key:\"presentation\",label:\"Presentation\",values:[\"Stylish\",\"Modern\",\"Artistic\",\"Heritage\",\"Antique\",\"Elegant\",\"Luxurious\",\"Unique\",\"Rustic\",\"Other\"]}];for(const attr of seedAttributes){await client.query(`INSERT INTO ai_attribute_config (key, label, values) VALUES ($1, $2, $3)`,[attr.key,attr.label,JSON.stringify(attr.values)])}console.log(\"Seeded AI Attribute Config\")}await client.query(`\n      CREATE TABLE IF NOT EXISTS users (\n        id TEXT PRIMARY KEY,\n        name TEXT,\n        email TEXT UNIQUE,\n        role TEXT,\n        store_name TEXT,\n        avatar_url TEXT,\n        status TEXT,\n        joined_at TEXT\n      );\n    `);try{await client.query(\"ALTER TABLE users ADD CONSTRAINT users_email_key UNIQUE (email)\")}catch{}await client.query(`\n      CREATE TABLE IF NOT EXISTS products (\n        id TEXT PRIMARY KEY,\n        vendor_id TEXT,\n        product_name TEXT,\n        brand_name TEXT,\n        description TEXT,\n        category TEXT,\n        concentration TEXT,\n        status TEXT,\n        images JSONB DEFAULT '[]'::jsonb,\n        variants JSONB DEFAULT '[]'::jsonb,\n        fragrance_notes JSONB DEFAULT '{}'::jsonb,\n        ai_batch_status TEXT,\n        ai_data JSONB DEFAULT '{}'::jsonb,\n        product_dna JSONB DEFAULT '{}'::jsonb,\n        created_at TEXT,\n        updated_at TEXT\n      );\n    `);try{await client.query(`ALTER TABLE products ADD COLUMN IF NOT EXISTS ai_data JSONB DEFAULT '{}'::jsonb;`)}catch{}try{await client.query(`ALTER TABLE products ADD COLUMN IF NOT EXISTS product_dna JSONB DEFAULT '{}'::jsonb;`)}catch{}try{await client.query(`ALTER TABLE products ADD COLUMN IF NOT EXISTS embedding vector(1536);`);await client.query(`CREATE INDEX IF NOT EXISTS products_embedding_idx ON products USING hnsw (embedding vector_cosine_ops);`);console.log(\"\\u2705 Embedding column and HNSW index configured\")}catch(err){console.warn(\"\\u26A0\\uFE0F  Could not add vector column. Check pgvector installation.\",err.message)}try{await client.query(`ALTER TABLE users ADD COLUMN IF NOT EXISTS preferences JSONB DEFAULT '{}'::jsonb;`);await client.query(`ALTER TABLE users ADD COLUMN IF NOT EXISTS embedding vector(1536);`);await client.query(`ALTER TABLE users ADD COLUMN IF NOT EXISTS phone TEXT;`);await client.query(`ALTER TABLE users ADD COLUMN IF NOT EXISTS address TEXT;`);await client.query(`CREATE INDEX IF NOT EXISTS users_embedding_idx ON users USING hnsw (embedding vector_cosine_ops);`);console.log(\"\\u2705 User preferences and embedding configured\")}catch(err){console.warn(\"\\u26A0\\uFE0F  Could not add user vector column. Check pgvector installation.\",err.message)}try{await client.query(`ALTER TABLE products ADD COLUMN IF NOT EXISTS barcode JSONB DEFAULT '{}'::jsonb;`);await client.query(`ALTER TABLE users ADD COLUMN IF NOT EXISTS personal_barcode JSONB DEFAULT '{}'::jsonb;`);console.log(\"\\u2705 Barcode columns configured\")}catch(err){console.warn(\"\\u26A0\\uFE0F  Could not add barcode columns.\",err.message)}await client.query(`\n      CREATE TABLE IF NOT EXISTS customer_preference_config (\n        key TEXT PRIMARY KEY,\n        label TEXT,\n        values JSONB DEFAULT '[]'::jsonb,\n        description TEXT,\n        category TEXT DEFAULT 'USER_DNA',\n        mode TEXT DEFAULT 'DEEP',\n        sort_order INTEGER DEFAULT 0,\n        required BOOLEAN DEFAULT true,\n        helper_text TEXT,\n        curiosity_prompt TEXT,\n        weight NUMERIC DEFAULT 1,\n        depends_on_key TEXT,\n        depends_on_value TEXT\n      );\n    `);await client.query(`ALTER TABLE customer_preference_config ADD COLUMN IF NOT EXISTS category TEXT DEFAULT 'USER_DNA';`);await client.query(`ALTER TABLE customer_preference_config ADD COLUMN IF NOT EXISTS mode TEXT DEFAULT 'DEEP';`);await client.query(`ALTER TABLE customer_preference_config ADD COLUMN IF NOT EXISTS sort_order INTEGER DEFAULT 0;`);await client.query(`ALTER TABLE customer_preference_config ADD COLUMN IF NOT EXISTS required BOOLEAN DEFAULT true;`);await client.query(`ALTER TABLE customer_preference_config ADD COLUMN IF NOT EXISTS helper_text TEXT;`);await client.query(`ALTER TABLE customer_preference_config ADD COLUMN IF NOT EXISTS curiosity_prompt TEXT;`);await client.query(`ALTER TABLE customer_preference_config ADD COLUMN IF NOT EXISTS weight NUMERIC DEFAULT 1;`);await client.query(`ALTER TABLE customer_preference_config ADD COLUMN IF NOT EXISTS depends_on_key TEXT;`);await client.query(`ALTER TABLE customer_preference_config ADD COLUMN IF NOT EXISTS depends_on_value TEXT;`);const prefCheck=await client.query(\"SELECT * FROM customer_preference_config\");if(prefCheck.rows.length===0){await replaceCustomerQuestions(client,DEFAULT_CUSTOMER_QUESTIONS);console.log(\"Seeded Customer Preference Config\")}else if(isLegacyQuestionConfig(prefCheck.rows)){await replaceCustomerQuestions(client,DEFAULT_CUSTOMER_QUESTIONS);console.log(\"Upgraded legacy customer question config to document-based DNA question tree\")}await client.query(`\n      CREATE TABLE IF NOT EXISTS orders (\n        id TEXT PRIMARY KEY,\n        order_number TEXT,\n        vendor_id TEXT,\n        customer_name TEXT,\n        customer_email TEXT,\n        total NUMERIC,\n        status TEXT,\n        shipping_address TEXT,\n        items JSONB,\n        created_at TEXT\n      );\n    `);await client.query(`\n      CREATE TABLE IF NOT EXISTS system_logs (\n        id SERIAL PRIMARY KEY,\n        level TEXT,\n        source TEXT,\n        message TEXT,\n        timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n      );\n    `);await client.query(`\n      CREATE TABLE IF NOT EXISTS recommendation_events (\n        id SERIAL PRIMARY KEY,\n        user_id TEXT,\n        product_id TEXT,\n        event_type TEXT,\n        metadata JSONB DEFAULT '{}'::jsonb,\n        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n      );\n    `);await client.query(`CREATE INDEX IF NOT EXISTS idx_recommendation_events_user_id ON recommendation_events(user_id);`);await client.query(`CREATE INDEX IF NOT EXISTS idx_recommendation_events_product_id ON recommendation_events(product_id);`);const adminCheck=await client.query(\"SELECT * FROM users WHERE email = $1\",[\"admin@americanfragrances.com\"]);if(adminCheck.rows.length===0){await client.query(`\n        INSERT INTO users (id, name, email, role, store_name, avatar_url, status, joined_at)\n        VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n      `,[\"admin-1\",\"Internal Admin\",\"admin@americanfragrances.com\",\"ADMIN\",\"American Fragrances HQ\",\"https://ui-avatars.com/api/?name=Admin+User&background=0ea5e9&color=fff\",\"ACTIVE\",new Date().toISOString()]);console.log(\"Seeded Admin User\")}client.release();console.log(\"\\u2705 Database Schema Initialized & Seeded (if empty)\")}catch(err){console.error(\"\\u274C Schema Init Failed:\",err.message)}},\"initSchema\");app.use((req,res,next)=>{const timestamp=new Date().toISOString().split(\"T\")[1].slice(0,8);console.log(`[${timestamp}] ${req.method} ${req.url}`);next()});const generateEmbedding=__name(async text=>{if(!process.env.AWS_ACCESS_KEY_ID||!text)return null;try{const bedrock=new BedrockRuntimeClient({region:process.env.AWS_REGION||\"us-east-1\"});const modelId=\"amazon.titan-embed-text-v1\";const payload={inputText:text};const command=new InvokeModelCommand({modelId,contentType:\"application/json\",accept:\"application/json\",body:JSON.stringify(payload)});const response=await bedrock.send(command);const decoded=new TextDecoder().decode(response.body);const body=JSON.parse(decoded);return body.embedding}catch(e){console.error(\"Embedding Generation Error:\",e.message);return null}},\"generateEmbedding\");const invokeClaude=__name(async(promptText,maxTokens=1400)=>{if(!process.env.AWS_ACCESS_KEY_ID)return null;try{console.log(`[BEDROCK] Invoking Claude Haiku (prompt chars: ${promptText.length}, maxTokens: ${maxTokens})`);const bedrock=new BedrockRuntimeClient({region:process.env.AWS_REGION||\"us-east-1\"});const modelId=\"anthropic.claude-3-haiku-20240307-v1:0\";const payload={anthropic_version:\"bedrock-2023-05-31\",max_tokens:maxTokens,messages:[{role:\"user\",content:promptText}]};const command=new InvokeModelCommand({modelId,contentType:\"application/json\",accept:\"application/json\",body:JSON.stringify(payload)});const response=await bedrock.send(command);const decoded=new TextDecoder().decode(response.body);const responseBody=JSON.parse(decoded);console.log(\"[BEDROCK] Claude response received successfully\");return responseBody?.content?.[0]?.text?.trim()||null}catch(e){console.error(\"Claude Invocation Error:\",e.message);return null}},\"invokeClaude\");const parseClaudeJson=__name((rawText,fallback={})=>{if(!rawText)return fallback;try{const cleaned=rawText.replace(/^```json\\s*/i,\"\").replace(/^```\\s*/i,\"\").replace(/\\s*```$/i,\"\").trim();return JSON.parse(cleaned)}catch{return fallback}},\"parseClaudeJson\");const buildQuestionPrompt=__name((questions,modes=[\"QUICK\",\"DEEP\",\"BOTH\"])=>{return questions.filter(question=>modes.includes(question.mode||\"DEEP\")).map(question=>`- ${question.key}: ${Array.isArray(question.values)?question.values.join(\" | \"):\"\"}`).join(\"\\n\")},\"buildQuestionPrompt\");const inferProfileFromText=__name(async(description,questions,profileType=\"customer\")=>{if(!description||!description.trim())return{};console.log(`[TOOL][${profileType.toUpperCase()}] Inferring profile from free text`);const prompt=`\nYou map a natural-language fragrance description to AmeriFrag DNA answers.\n\nReturn ONLY valid JSON.\nRules:\n- Use only keys from the allowed question list.\n- Each selected answer must exactly match one of the allowed values.\n- Output each selected answer as an array with one string value.\n- Only include keys you are reasonably confident about.\n- Prefer smell_attraction, preferred_notes, desired_impression, occasion, signature_preference, presence_level, emotional_effect, temperature_preference, scent_direction, trend_preference, brand_familiarity, performance_expectation.\n\nAllowed questions:\n${buildQuestionPrompt(questions)}\n\nProfile type: ${profileType}\nDescription:\n${description}\n  `;const raw=await invokeClaude(prompt,900);const parsed=parseClaudeJson(raw,{});const safeProfile={};for(const question of questions){const value=parsed?.[question.key];const candidate=Array.isArray(value)?value[0]:value;if(candidate&&Array.isArray(question.values)&&question.values.includes(candidate)){safeProfile[question.key]=[candidate]}}console.log(`[TOOL][${profileType.toUpperCase()}] Inferred ${Object.keys(safeProfile).length} DNA fields from free text`);return safeProfile},\"inferProfileFromText\");const buildToolNarrative=__name(async(toolName,payload)=>{console.log(`[TOOL][${toolName}] Building premium narrative`);const prompt=`\nYou are writing premium AI fragrance tool copy for AmeriFrag.\n\nReturn ONLY valid JSON with this exact shape:\n{\n  \"headline\": \"short headline\",\n  \"summary\": \"2-3 sentence elegant explanation\",\n  \"bullets\": [\"bullet 1\", \"bullet 2\", \"bullet 3\"]\n}\n\nTool: ${toolName}\nData:\n${JSON.stringify(payload,null,2)}\n  `;const raw=await invokeClaude(prompt,700);console.log(`[TOOL][${toolName}] Narrative generation completed`);return parseClaudeJson(raw,{headline:`${toolName} result`,summary:\"Your saved scent DNA has been used to shape these recommendations.\",bullets:[]})},\"buildToolNarrative\");const getTopTrait=__name(record=>{if(!record||typeof record!==\"object\")return\"\";const sorted=Object.entries(record).sort(([,a],[,b])=>Number(b)-Number(a));return sorted.length>0?sorted[0][0]:\"\"},\"getTopTrait\");const normalizeText=__name((value=\"\")=>String(value).toLowerCase().replace(/[^a-z0-9\\s/&-]/g,\" \").replace(/\\s+/g,\" \").trim(),\"normalizeText\");const escapeRegExp=__name((value=\"\")=>value.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\"),\"escapeRegExp\");const clampScore=__name((value,min=0,max=100)=>Math.max(min,Math.min(max,value)),\"clampScore\");const answerKeywordMap={smell_attraction:{\"fresh & clean\":[\"fresh\",\"clean\",\"citrus\",\"aquatic\",\"grapefruit\",\"bergamot\",\"marine\",\"soap\"],\"warm & cozy\":[\"warm\",\"amber\",\"vanilla\",\"soft\",\"cozy\",\"comfort\",\"tonka\"],\"sweet & gourmand\":[\"sweet\",\"gourmand\",\"dessert\",\"vanilla\",\"caramel\",\"chocolate\",\"praline\"],\"spicy & bold\":[\"spicy\",\"pepper\",\"bold\",\"oriental\",\"incense\",\"cardamom\",\"clove\"],\"dark & smoky\":[\"dark\",\"smoky\",\"leather\",\"oud\",\"incense\",\"tobacco\",\"resin\"]},preferred_notes:{citrus:[\"citrus\",\"bergamot\",\"grapefruit\",\"lemon\",\"orange\",\"neroli\"],floral:[\"floral\",\"rose\",\"jasmine\",\"iris\",\"tuberose\",\"lavender\",\"ylang\"],woody:[\"woody\",\"wood\",\"cedar\",\"sandalwood\",\"vetiver\",\"patchouli\",\"oakmoss\"],vanilla:[\"vanilla\",\"tonka\",\"amber\",\"sweet\",\"gourmand\"],spicy:[\"spicy\",\"pepper\",\"cardamom\",\"clove\",\"cinnamon\",\"nutmeg\"],musky:[\"musk\",\"musky\",\"clean musk\",\"skin scent\"]},desired_impression:{\"attractive / seductive\":[\"seductive\",\"sensual\",\"romantic\",\"alluring\",\"date\"],\"professional / clean\":[\"professional\",\"office\",\"clean\",\"fresh\",\"versatile\"],\"elegant / classy\":[\"elegant\",\"classy\",\"luxury\",\"refined\",\"sophisticated\"],\"bold / dominant\":[\"bold\",\"dominant\",\"powerful\",\"statement\",\"intense\"],\"friendly / soft\":[\"soft\",\"friendly\",\"gentle\",\"easy\",\"approachable\"]},occasion:{\"office / daily\":[\"office\",\"daily\",\"work\",\"clean\",\"versatile\"],date:[\"date\",\"romantic\",\"seductive\",\"evening\"],party:[\"party\",\"club\",\"night\",\"loud\",\"bold\"],\"special event\":[\"special event\",\"formal\",\"luxury\",\"elegant\"],travel:[\"travel\",\"fresh\",\"versatile\",\"easy\"],everything:[\"versatile\",\"all day\",\"signature\",\"daily\"]},signature_preference:{\"very safe\":[\"safe\",\"crowd pleasing\",\"mass appeal\",\"versatile\",\"classic\"],\"slightly unique\":[\"balanced\",\"modern\",\"refined\"],balanced:[\"balanced\",\"versatile\",\"refined\"],unique:[\"unique\",\"niche\",\"distinctive\",\"uncommon\"],\"very experimental\":[\"experimental\",\"challenging\",\"artistic\",\"niche\",\"oud\",\"smoky\"]},presence_level:{\"skin scent\":[\"skin scent\",\"soft\",\"intimate\",\"subtle\"],close:[\"close\",\"soft\",\"intimate\"],moderate:[\"moderate\",\"balanced\",\"versatile\"],strong:[\"strong\",\"projecting\",\"bold\",\"beast mode\"],\"very strong\":[\"very strong\",\"intense\",\"loud\",\"powerful\"]},emotional_effect:{relaxed:[\"relaxed\",\"calm\",\"clean\",\"comfort\"],confident:[\"confident\",\"sharp\",\"modern\",\"masculine\",\"assertive\"],energetic:[\"energetic\",\"bright\",\"citrus\",\"fresh\"],romantic:[\"romantic\",\"seductive\",\"soft\",\"date\"],powerful:[\"powerful\",\"bold\",\"intense\",\"dominant\"]},temperature_preference:{\"very fresh\":[\"fresh\",\"cool\",\"aquatic\",\"citrus\"],\"slightly fresh\":[\"fresh\",\"clean\",\"aromatic\"],balanced:[\"balanced\",\"versatile\"],\"slightly warm\":[\"warm\",\"amber\",\"spicy\"],\"very warm\":[\"warm\",\"amber\",\"sweet\",\"oriental\",\"resin\"]},scent_direction:{\"clean / aquatic\":[\"clean\",\"aquatic\",\"marine\",\"fresh\"],\"woody / earthy\":[\"woody\",\"earthy\",\"vetiver\",\"patchouli\",\"cedar\"],\"sweet / dessert-like\":[\"sweet\",\"gourmand\",\"vanilla\",\"dessert\"],\"spicy / oriental\":[\"spicy\",\"oriental\",\"amber\",\"incense\"],floral:[\"floral\",\"rose\",\"jasmine\",\"iris\"]},segment_preference:{designer:[\"designer\",\"popular\",\"mass appeal\",\"versatile\"],luxury:[\"luxury\",\"premium\",\"exclusive\"],niche:[\"niche\",\"artistic\",\"unique\",\"indie\"],celebrity:[\"celebrity\",\"mainstream\"],\"no preference\":[\"designer\",\"luxury\",\"niche\",\"popular\"]},rejection_triggers:{\"too sweet\":[\"sweet\",\"gourmand\",\"caramel\",\"praline\"],\"too strong\":[\"strong\",\"intense\",\"loud\",\"projecting\"],\"too synthetic\":[\"synthetic\",\"sharp\",\"metallic\"],\"too floral\":[\"floral\",\"rose\",\"jasmine\",\"tuberose\"],\"too spicy\":[\"spicy\",\"pepper\",\"cinnamon\",\"cardamom\"]},time_of_use:{day:[\"day\",\"daily\",\"fresh\",\"office\"],night:[\"night\",\"evening\",\"date\",\"dark\",\"intense\"],\"all day\":[\"all day\",\"versatile\",\"signature\",\"daily\"]},versatility:{daily:[\"daily\",\"easy\",\"office\",\"versatile\"],occasion:[\"special event\",\"date\",\"party\",\"evening\"],signature:[\"signature\",\"unique\",\"versatile\"]},environment:{hot:[\"fresh\",\"citrus\",\"aquatic\",\"summer\",\"hot weather\"],cold:[\"warm\",\"amber\",\"spicy\",\"winter\",\"cold weather\"],ac:[\"office\",\"clean\",\"versatile\"],outdoor:[\"outdoor\",\"fresh\",\"green\",\"woody\"],mixed:[\"versatile\",\"balanced\",\"all day\"]},format_strength:{small:[\"travel\",\"portable\",\"small\"],medium:[\"balanced\",\"standard\"],large:[\"large\",\"value\",\"big bottle\"],strong:[\"strong\",\"intense\",\"parfum\",\"extrait\"],light:[\"light\",\"soft\",\"edt\",\"cologne\"]},brand_familiarity:{\"known brands\":[\"designer\",\"popular\",\"classic\",\"mass appeal\"],\"explore new\":[\"niche\",\"unique\",\"indie\",\"experimental\"],both:[\"designer\",\"niche\",\"balanced\"]},trend_preference:{classic:[\"classic\",\"timeless\",\"iconic\"],trending:[\"trending\",\"viral\",\"modern\",\"popular\"],balanced:[\"balanced\",\"modern classic\",\"versatile\"]},performance_expectation:{\"long lasting\":[\"long lasting\",\"lasting\",\"longevity\",\"all day\"],\"strong projection\":[\"projection\",\"projecting\",\"strong\",\"loud\"],balanced:[\"balanced\",\"moderate\",\"versatile\"],light:[\"light\",\"soft\",\"subtle\"]}};const getSelectedAnswer=__name((preferences,key)=>{const answer=preferences?.[key];if(Array.isArray(answer))return answer[0];return answer},\"getSelectedAnswer\");const getLowestVariantPrice=__name(product=>{const variants=Array.isArray(product.variants)?product.variants:[];const prices=variants.map(variant=>Number(variant?.price)).filter(price=>Number.isFinite(price)&&price>0);if(prices.length===0)return null;return Math.min(...prices)},\"getLowestVariantPrice\");const buildProductProfileText=__name(product=>{const noteGroups=product.fragranceNotes||{};const noteText=Object.values(noteGroups).flatMap(value=>Array.isArray(value)?value:[]).join(\" \");const barcodeText=product.barcode?.segments?.map(segment=>`${segment.category} ${segment.value}`).join(\" \")||\"\";const aiText=Object.entries(product.aiData||{}).map(([key,value])=>{if(value&&typeof value===\"object\"&&!Array.isArray(value)){return`${key} ${Object.keys(value).join(\" \")} ${getTopTrait(value)}`}return`${key} ${String(value)}`}).join(\" \");return normalizeText([product.productName,product.brandName,product.description,product.category,product.concentration,noteText,barcodeText,aiText].join(\" \"))},\"buildProductProfileText\");const buildRegexPattern=__name(term=>new RegExp(`(^|\\\\s)${escapeRegExp(normalizeText(term))}(\\\\s|$)`,\"i\"),\"buildRegexPattern\");const matchesKeyword=__name((haystack,keyword)=>{const normalizedKeyword=normalizeText(keyword);if(!normalizedKeyword)return false;return buildRegexPattern(normalizedKeyword).test(haystack)},\"matchesKeyword\");const scoreKeywordAlignment=__name((haystack,keywords=[])=>{const uniqueKeywords=[...new Set((keywords||[]).map(keyword=>normalizeText(keyword)).filter(Boolean))];if(uniqueKeywords.length===0)return 50;const matchedCount=uniqueKeywords.filter(keyword=>matchesKeyword(haystack,keyword)).length;if(matchedCount===0)return 18;return clampScore(30+matchedCount/uniqueKeywords.length*70)},\"scoreKeywordAlignment\");const scoreBudgetFit=__name((answer,product)=>{const price=getLowestVariantPrice(product);if(!price||!answer)return 55;const normalized=normalizeText(answer);const budgetRanges={budget:[0,60],mid:[45,130],premium:[90,220],luxury:[180,1e3],\"no limit\":[0,Infinity]};const range=budgetRanges[normalized];if(!range)return 55;if(price>=range[0]&&price<=range[1])return 95;const midpoint=range[1]===Infinity?Math.max(range[0],price):(range[0]+range[1])/2;const distance=Math.abs(price-midpoint);return clampScore(95-distance*.5)},\"scoreBudgetFit\");const scoreReferenceFragrance=__name((answer,product,productText)=>{if(!answer||normalizeText(answer)===\"not sure\")return 55;const referenceText=normalizeText(answer);if(productText.includes(referenceText))return 100;const referenceTokens=referenceText.split(\" \").filter(Boolean);return scoreKeywordAlignment(productText,referenceTokens)},\"scoreReferenceFragrance\");const averageScores=__name((scores=[],fallback=50)=>{const validScores=scores.filter(score=>Number.isFinite(Number(score)));if(validScores.length===0)return fallback;return clampScore(validScores.reduce((sum,score)=>sum+Number(score),0)/validScores.length)},\"averageScores\");const closenessToTarget=__name((value,target,spread=30)=>{if(!Number.isFinite(Number(value)))return 50;return clampScore(100-Math.abs(Number(value)-Number(target))/Math.max(spread,1)*100)},\"closenessToTarget\");const PRODUCT_TRAIT_KEYWORDS={fresh:[\"fresh\",\"crisp\",\"bergamot\",\"citrus\",\"grapefruit\",\"green\",\"bright\"],clean:[\"clean\",\"soap\",\"linen\",\"shower fresh\",\"polished\",\"office\"],aquatic:[\"aquatic\",\"marine\",\"water\",\"oceanic\",\"sea\",\"ozonic\"],warm:[\"warm\",\"amber\",\"tonka\",\"comfort\",\"cozy\",\"resin\"],sweet:[\"sweet\",\"vanilla\",\"gourmand\",\"caramel\",\"dessert\",\"praline\",\"sugary\"],spicy:[\"spicy\",\"pepper\",\"cardamom\",\"clove\",\"cinnamon\",\"oriental\"],dark:[\"dark\",\"smoky\",\"tobacco\",\"oud\",\"leather\",\"incense\",\"resinous\"],floral:[\"floral\",\"rose\",\"jasmine\",\"iris\",\"tuberose\",\"lavender\"],woody:[\"woody\",\"wood\",\"cedar\",\"vetiver\",\"sandalwood\",\"patchouli\",\"earthy\"],musky:[\"musk\",\"musky\",\"skin scent\",\"powdery\"],romantic:[\"romantic\",\"seductive\",\"date\",\"alluring\",\"sensual\"],professional:[\"professional\",\"office\",\"clean\",\"versatile\",\"smart\"],elegant:[\"elegant\",\"classy\",\"refined\",\"luxury\",\"sophisticated\"],bold:[\"bold\",\"dominant\",\"powerful\",\"statement\",\"intense\"],friendly:[\"friendly\",\"soft\",\"gentle\",\"easy\",\"approachable\"],relaxed:[\"relaxed\",\"calm\",\"comfort\",\"soft\",\"easygoing\"],confident:[\"confident\",\"sharp\",\"commanding\",\"assertive\",\"magnetic\"],energetic:[\"energetic\",\"bright\",\"sparkling\",\"zesty\",\"uplifting\"],powerful:[\"powerful\",\"dominant\",\"commanding\",\"beast mode\",\"intense\"],daily:[\"daily\",\"easy\",\"office\",\"versatile\",\"signature\"],occasion:[\"special event\",\"formal\",\"statement\",\"evening\",\"ceremony\"],signature:[\"signature\",\"versatile\",\"distinctive\",\"identity\"],day:[\"day\",\"morning\",\"afternoon\",\"office\"],night:[\"night\",\"evening\",\"late night\",\"date\"],hot:[\"summer\",\"fresh\",\"aquatic\",\"citrus\",\"light\"],cold:[\"winter\",\"warm\",\"spicy\",\"amber\",\"dark\"],ac:[\"office\",\"clean\",\"versatile\",\"balanced\"],outdoor:[\"outdoor\",\"green\",\"woody\",\"fresh\"],designer:[\"designer\",\"popular\",\"versatile\",\"mass appeal\"],luxury:[\"luxury\",\"premium\",\"exclusive\",\"refined\"],niche:[\"niche\",\"artistic\",\"indie\",\"rare\",\"experimental\"],celebrity:[\"celebrity\",\"mainstream\",\"easy\",\"popular\"],classic:[\"classic\",\"timeless\",\"iconic\",\"heritage\"],trending:[\"trending\",\"viral\",\"modern\",\"popular\"]};const getTopAiValueByKeys=__name((product,keys=[])=>{for(const key of keys){const record=product.aiData?.[key];if(record&&typeof record===\"object\"&&!Array.isArray(record)){const top=normalizeText(getTopTrait(record));if(top)return top}}return\"\"},\"getTopAiValueByKeys\");const getVariantSizeProfile=__name(product=>{const sizes=(product.variants||[]).map(variant=>{const match=String(variant.size||variant.name||\"\").match(/(\\d+(?:\\.\\d+)?)\\s*ml/i);return match?Number(match[1]):null}).filter(size=>Number.isFinite(size));const maxSize=sizes.length>0?Math.max(...sizes):null;return{maxSize,small:maxSize?closenessToTarget(maxSize,30,40):55,medium:maxSize?closenessToTarget(maxSize,75,50):55,large:maxSize?closenessToTarget(maxSize,125,70):55}},\"getVariantSizeProfile\");const normalizeStringList=__name((value,fallback=[],maxLength=5)=>{const source=Array.isArray(value)?value:fallback;return source.map(item=>String(item||\"\").trim()).filter(Boolean).slice(0,maxLength)},\"normalizeStringList\");const normalizeProductDNAScores=__name((value,fallback={})=>{const normalized={};for(const[key,score]of Object.entries(value||{})){normalized[key]=clampScore(Number(score),0,100)}for(const[key,score]of Object.entries(fallback||{})){if(normalized[key]===void 0){normalized[key]=clampScore(Number(score),0,100)}}return normalized},\"normalizeProductDNAScores\");const finalizeProductDNA=__name((dna={},fallback={})=>{const merged=mergeProductDNARecords(fallback,dna);const normalized={...merged,massAppealScore:clampScore(Number(merged.massAppealScore??fallback.massAppealScore??60),0,100),uniquenessScore:clampScore(Number(merged.uniquenessScore??fallback.uniquenessScore??60),0,100),valueScore:clampScore(Number(merged.valueScore??fallback.valueScore??60),0,100),complimentFactorScore:clampScore(Number(merged.complimentFactorScore??fallback.complimentFactorScore??60),0,100),riskIndex:clampScore(Number(merged.riskIndex??fallback.riskIndex??40),0,100),popularityTrendScore:clampScore(Number(merged.popularityTrendScore??fallback.popularityTrendScore??55),0,100),globalSentimentScore:clampScore(Number(merged.globalSentimentScore??fallback.globalSentimentScore??60),0,100),projectionScore:clampScore(Number(merged.projectionScore??fallback.projectionScore??55),0,100),longevityScore:clampScore(Number(merged.longevityScore??fallback.longevityScore??55),0,100),versatilityScore:clampScore(Number(merged.versatilityScore??fallback.versatilityScore??55),0,100),climateAdaptability:clampScore(Number(merged.climateAdaptability??fallback.climateAdaptability??55),0,100),layeringScore:clampScore(Number(merged.layeringScore??fallback.layeringScore??55),0,100),seasonalSpecificity:clampScore(Number(merged.seasonalSpecificity??fallback.seasonalSpecificity??55),0,100),trustSignalScore:clampScore(Number(merged.trustSignalScore??fallback.trustSignalScore??60),0,100),purchaseConfidenceScore:clampScore(Number(merged.purchaseConfidenceScore??fallback.purchaseConfidenceScore??60),0,100),traitScores:normalizeProductDNAScores(merged.traitScores,fallback.traitScores),occasionFit:normalizeProductDNAScores(merged.occasionFit,fallback.occasionFit),timeFit:normalizeProductDNAScores(merged.timeFit,fallback.timeFit),environmentFit:normalizeProductDNAScores(merged.environmentFit,fallback.environmentFit),layeringCompatibility:normalizeStringList(merged.layeringCompatibility,fallback.layeringCompatibility||[],4),personaTags:normalizeStringList(merged.personaTags,fallback.personaTags||[],4),moodTags:normalizeStringList(merged.moodTags,fallback.moodTags||[],4),noteSignature:normalizeStringList(merged.noteSignature,fallback.noteSignature||[],4),climateTags:normalizeStringList(merged.climateTags,fallback.climateTags||[],4),keyStrengths:normalizeStringList(merged.keyStrengths,fallback.keyStrengths||[],4),cautionAreas:normalizeStringList(merged.cautionAreas,fallback.cautionAreas||[],4),reviewHighlights:normalizeStringList(merged.reviewHighlights,fallback.reviewHighlights||[],4),reasons:normalizeStringList(merged.reasons,fallback.reasons||[],4),similarityCluster:String(merged.similarityCluster||fallback.similarityCluster||\"balanced-signature\").trim(),dominantFamily:String(merged.dominantFamily||fallback.dominantFamily||\"balanced\").trim(),genderTone:[\"masculine\",\"feminine\",\"unisex\"].includes(String(merged.genderTone||\"\").trim())?String(merged.genderTone).trim():fallback.genderTone||\"unisex\",segmentType:[\"designer\",\"luxury\",\"niche\",\"celebrity\"].includes(String(merged.segmentType||\"\").trim())?String(merged.segmentType).trim():fallback.segmentType||\"designer\",validation:{completenessScore:clampScore(Number(merged.validation?.completenessScore??fallback.validation?.completenessScore??60),0,100),coherenceScore:clampScore(Number(merged.validation?.coherenceScore??fallback.validation?.coherenceScore??60),0,100),calibrationScore:clampScore(Number(merged.validation?.calibrationScore??fallback.validation?.calibrationScore??60),0,100),confidenceLabel:[\"Watch\",\"Promising\",\"Strong\",\"Elite\"].includes(String(merged.validation?.confidenceLabel||fallback.validation?.confidenceLabel||\"\").trim())?String(merged.validation?.confidenceLabel||fallback.validation?.confidenceLabel).trim():\"Promising\",warnings:normalizeStringList(merged.validation?.warnings,fallback.validation?.warnings||[],4)}};return normalized},\"finalizeProductDNA\");const mergeProductDNARecords=__name((baseDNA={},storedDNA={})=>{if(!storedDNA||typeof storedDNA!==\"object\")return baseDNA;return{...baseDNA,...storedDNA,traitScores:{...baseDNA.traitScores||{},...storedDNA.traitScores||{}},occasionFit:{...baseDNA.occasionFit||{},...storedDNA.occasionFit||{}},timeFit:{...baseDNA.timeFit||{},...storedDNA.timeFit||{}},environmentFit:{...baseDNA.environmentFit||{},...storedDNA.environmentFit||{}},sizeProfile:{...baseDNA.sizeProfile||{},...storedDNA.sizeProfile||{}},layeringCompatibility:Array.isArray(storedDNA.layeringCompatibility)?storedDNA.layeringCompatibility:baseDNA.layeringCompatibility||[],similarityCluster:storedDNA.similarityCluster||baseDNA.similarityCluster,personaTags:Array.isArray(storedDNA.personaTags)?storedDNA.personaTags:baseDNA.personaTags||[],moodTags:Array.isArray(storedDNA.moodTags)?storedDNA.moodTags:baseDNA.moodTags||[],noteSignature:Array.isArray(storedDNA.noteSignature)?storedDNA.noteSignature:baseDNA.noteSignature||[],climateTags:Array.isArray(storedDNA.climateTags)?storedDNA.climateTags:baseDNA.climateTags||[],keyStrengths:Array.isArray(storedDNA.keyStrengths)?storedDNA.keyStrengths:baseDNA.keyStrengths||[],cautionAreas:Array.isArray(storedDNA.cautionAreas)?storedDNA.cautionAreas:baseDNA.cautionAreas||[],reviewHighlights:Array.isArray(storedDNA.reviewHighlights)?storedDNA.reviewHighlights:baseDNA.reviewHighlights||[],reasons:Array.isArray(storedDNA.reasons)&&storedDNA.reasons.length>0?storedDNA.reasons:baseDNA.reasons||[],validation:{...baseDNA.validation||{},...storedDNA.validation||{}}}},\"mergeProductDNARecords\");const enrichProductDNAWithBedrock=__name(async(product,heuristicDNA)=>{if(!process.env.AWS_ACCESS_KEY_ID)return heuristicDNA;const prompt=`\nYou are AmeriFrag's Product DNA engine.\n\nReturn ONLY valid JSON.\nUse the product details below to enrich the existing heuristic Product DNA with premium fragrance intelligence.\nThink like a senior fragrance merchandiser, reviewer, and recommendation scientist.\n\nRequired shape:\n{\n  \"massAppealScore\": number,\n  \"uniquenessScore\": number,\n  \"valueScore\": number,\n  \"complimentFactorScore\": number,\n  \"riskIndex\": number,\n  \"popularityTrendScore\": number,\n  \"globalSentimentScore\": number,\n  \"projectionScore\": number,\n  \"longevityScore\": number,\n  \"versatilityScore\": number,\n  \"climateAdaptability\": number,\n  \"layeringScore\": number,\n  \"seasonalSpecificity\": number,\n  \"trustSignalScore\": number,\n  \"purchaseConfidenceScore\": number,\n  \"genderTone\": \"masculine\" | \"feminine\" | \"unisex\",\n  \"segmentType\": \"designer\" | \"luxury\" | \"niche\" | \"celebrity\",\n  \"dominantFamily\": string,\n  \"layeringCompatibility\": [string, string, string, string],\n  \"similarityCluster\": string,\n  \"personaTags\": [string, string, string, string],\n  \"moodTags\": [string, string, string, string],\n  \"noteSignature\": [string, string, string, string],\n  \"climateTags\": [string, string, string, string],\n  \"keyStrengths\": [string, string, string, string],\n  \"cautionAreas\": [string, string, string],\n  \"reviewHighlights\": [string, string, string],\n  \"reasons\": [string, string, string, string]\n}\n\nRules:\n- scores must be between 0 and 100\n- keep the output perfume-specific, not generic\n- use the heuristic DNA as a starting point, but improve it where the product clearly suggests something better\n- if uncertain, stay close to the heuristic values\n- avoid extreme scores unless the product clearly deserves them\n- \"massAppealScore\" means how easy it is for most people to enjoy\n- \"uniquenessScore\" means how distinct and non-generic the scent feels\n- \"complimentFactorScore\" means how likely it is to get positive real-world reactions\n- \"riskIndex\" means how polarizing, challenging, or unsafe it may feel to blind buyers\n- \"trustSignalScore\" means how safe it is to recommend with confidence from the available evidence\n- \"purchaseConfidenceScore\" means how strong the recommendation confidence should feel for ecommerce\n- \"layeringCompatibility\" should mention actual layering directions, not vague words\n- \"similarityCluster\" should be a short specific cluster label like \"designer-fresh-office\" or \"niche-amber-evening\"\n- \"keyStrengths\" and \"cautionAreas\" should be useful for recommendation reasoning\n- \"reviewHighlights\" should sound like condensed review themes, not fabricated exact quotes\n\nProduct:\n${JSON.stringify({productName:product.productName,brandName:product.brandName,description:product.description,category:product.category,concentration:product.concentration,notes:product.fragranceNotes||{},aiData:product.aiData||{},barcode:product.barcode||{},variants:product.variants||[]},null,2)}\n\nHeuristic DNA:\n${JSON.stringify({massAppealScore:heuristicDNA.massAppealScore,uniquenessScore:heuristicDNA.uniquenessScore,valueScore:heuristicDNA.valueScore,complimentFactorScore:heuristicDNA.complimentFactorScore,riskIndex:heuristicDNA.riskIndex,popularityTrendScore:heuristicDNA.popularityTrendScore,globalSentimentScore:heuristicDNA.globalSentimentScore,projectionScore:heuristicDNA.projectionScore,longevityScore:heuristicDNA.longevityScore,versatilityScore:heuristicDNA.versatilityScore,climateAdaptability:heuristicDNA.climateAdaptability,layeringScore:heuristicDNA.layeringScore,seasonalSpecificity:heuristicDNA.seasonalSpecificity,trustSignalScore:heuristicDNA.trustSignalScore,purchaseConfidenceScore:heuristicDNA.purchaseConfidenceScore,genderTone:heuristicDNA.genderTone,segmentType:heuristicDNA.segmentType,dominantFamily:heuristicDNA.dominantFamily},null,2)}\n  `;const raw=await invokeClaude(prompt,1e3);const parsed=parseClaudeJson(raw,{});return finalizeProductDNA(parsed,heuristicDNA)},\"enrichProductDNAWithBedrock\");const buildProductDNA=__name((product,productText)=>{const price=getLowestVariantPrice(product)||0;const segmentType=normalizeText(product.category).includes(\"niche\")||price>=220?\"niche\":price>=150?\"luxury\":price>=70?\"designer\":\"designer\";const priceBucket=price<=60?\"budget\":price<=130?\"mid\":price<=220?\"premium\":\"luxury\";const concentration=normalizeText(product.concentration);const styleHint=getTopAiValueByKeys(product,[\"scent_style\",\"style\"]);const noteHint=getTopAiValueByKeys(product,[\"key_note\",\"note\"]);const moodHint=getTopAiValueByKeys(product,[\"conveyed_mood\",\"mood\"]);const seasonHint=getTopAiValueByKeys(product,[\"season\"]);const occasionHint=getTopAiValueByKeys(product,[\"occasion\"]);const strengthHint=getTopAiValueByKeys(product,[\"fragrance_strength\",\"smell_intensity\"]);const longevityHint=getTopAiValueByKeys(product,[\"scent_life\",\"longevity\"]);const timeHint=getTopAiValueByKeys(product,[\"best_time_to_wear\",\"spray_time\"]);const scoreTrait=__name((trait,hints=[])=>{const hintTokens=hints.map(hint=>normalizeText(hint)).filter(Boolean);const keywordScore=scoreKeywordAlignment(productText,PRODUCT_TRAIT_KEYWORDS[trait]||[]);const hintScore=hintTokens.length>0?scoreKeywordAlignment(hintTokens.join(\" \"),PRODUCT_TRAIT_KEYWORDS[trait]||[]):50;return averageScores([keywordScore,hintScore],keywordScore)},\"scoreTrait\");const traitScores={fresh:scoreTrait(\"fresh\",[noteHint,seasonHint,timeHint,moodHint]),clean:scoreTrait(\"clean\",[styleHint,moodHint,occasionHint]),aquatic:scoreTrait(\"aquatic\",[noteHint,styleHint]),warm:scoreTrait(\"warm\",[seasonHint,moodHint,noteHint]),sweet:scoreTrait(\"sweet\",[noteHint,moodHint]),spicy:scoreTrait(\"spicy\",[noteHint,moodHint]),dark:scoreTrait(\"dark\",[styleHint,moodHint,occasionHint]),floral:scoreTrait(\"floral\",[noteHint]),woody:scoreTrait(\"woody\",[noteHint,styleHint]),musky:scoreTrait(\"musky\",[noteHint]),romantic:scoreTrait(\"romantic\",[moodHint,occasionHint]),professional:scoreTrait(\"professional\",[occasionHint,styleHint]),elegant:scoreTrait(\"elegant\",[styleHint,moodHint]),bold:scoreTrait(\"bold\",[styleHint,moodHint,strengthHint]),friendly:scoreTrait(\"friendly\",[moodHint,styleHint]),relaxed:scoreTrait(\"relaxed\",[moodHint]),confident:scoreTrait(\"confident\",[moodHint,styleHint]),energetic:scoreTrait(\"energetic\",[moodHint,noteHint]),powerful:scoreTrait(\"powerful\",[moodHint,strengthHint]),daily:scoreTrait(\"daily\",[occasionHint,timeHint]),occasion:scoreTrait(\"occasion\",[occasionHint,styleHint]),signature:scoreTrait(\"signature\",[styleHint,moodHint]),day:scoreTrait(\"day\",[timeHint,occasionHint]),night:scoreTrait(\"night\",[timeHint,occasionHint]),hot:scoreTrait(\"hot\",[seasonHint]),cold:scoreTrait(\"cold\",[seasonHint]),ac:scoreTrait(\"ac\",[occasionHint]),outdoor:scoreTrait(\"outdoor\",[occasionHint,seasonHint]),classic:scoreTrait(\"classic\",[styleHint]),trending:scoreTrait(\"trending\",[styleHint,moodHint])};const projectionScore=averageScores([scoreKeywordAlignment(normalizeText(`${strengthHint} ${concentration}`),[\"skin scent\",\"close\",\"moderate\",\"strong\",\"very strong\",\"intense\",\"powerful\"]),concentration.includes(\"parfum\")?95:concentration.includes(\"edp\")?78:concentration.includes(\"edt\")?58:concentration.includes(\"cologne\")?42:55]);const longevityScore=averageScores([scoreKeywordAlignment(normalizeText(`${longevityHint} ${productText}`),[\"long lasting\",\"all day\",\"lasting\",\"persistent\",\"enduring\"]),concentration.includes(\"parfum\")?88:concentration.includes(\"edp\")?76:concentration.includes(\"edt\")?60:concentration.includes(\"cologne\")?42:55]);const versatilityScore=averageScores([traitScores.daily,traitScores.clean,traitScores.professional,100-Math.abs(traitScores.fresh-traitScores.warm)*.4]);const climateAdaptability=clampScore(100-Math.abs(traitScores.hot-traitScores.cold)*.5);const massAppealScore=averageScores([traitScores.clean,traitScores.professional,traitScores.friendly,versatilityScore,segmentType===\"designer\"?88:68]);const uniquenessScore=averageScores([traitScores.dark,traitScores.spicy,traitScores.bold,segmentType===\"niche\"?92:56,traitScores.woody]);const valueScore=priceBucket===\"budget\"?92:priceBucket===\"mid\"?86:priceBucket===\"premium\"?78:68;const complimentFactorScore=averageScores([massAppealScore,traitScores.confident,traitScores.romantic,traitScores.elegant]);const riskIndex=clampScore(averageScores([uniquenessScore,projectionScore,traitScores.dark,traitScores.spicy])-massAppealScore*.25+22);const popularityTrendScore=averageScores([massAppealScore,traitScores.trending,traitScores.classic]);const globalSentimentScore=averageScores([massAppealScore,complimentFactorScore,valueScore,versatilityScore]);const layeringScore=averageScores([traitScores.woody,traitScores.musky,traitScores.clean,versatilityScore]);const seasonalSpecificity=clampScore(100-climateAdaptability*.75+averageScores([traitScores.hot,traitScores.cold])*.15);const trustSignalScore=averageScores([massAppealScore,valueScore,globalSentimentScore,versatilityScore]);const purchaseConfidenceScore=averageScores([trustSignalScore,complimentFactorScore,100-riskIndex]);const genderTone=normalizeText(product.category).includes(\"women\")?\"feminine\":normalizeText(product.category).includes(\"men\")?\"masculine\":\"unisex\";const dominantFamily=[\"fresh\",\"warm\",\"sweet\",\"spicy\",\"dark\",\"floral\",\"woody\",\"aquatic\"].sort((a,b)=>traitScores[b]-traitScores[a])[0];const variantSizeProfile=getVariantSizeProfile(product);const heuristicDNA={traitScores,projectionScore,longevityScore,versatilityScore,climateAdaptability,massAppealScore,uniquenessScore,valueScore,complimentFactorScore,riskIndex,popularityTrendScore,globalSentimentScore,layeringScore,seasonalSpecificity,trustSignalScore,purchaseConfidenceScore,genderTone,segmentType,priceBucket,dominantFamily,occasionFit:{office:averageScores([traitScores.professional,traitScores.clean,versatilityScore]),date:averageScores([traitScores.romantic,traitScores.warm,traitScores.confident]),party:averageScores([traitScores.bold,projectionScore,traitScores.night]),specialEvent:averageScores([traitScores.elegant,traitScores.occasion,complimentFactorScore]),travel:averageScores([traitScores.fresh,versatilityScore,valueScore]),everything:averageScores([versatilityScore,climateAdaptability,massAppealScore])},timeFit:{day:averageScores([traitScores.day,traitScores.fresh,traitScores.clean]),night:averageScores([traitScores.night,traitScores.warm,traitScores.bold]),allDay:averageScores([versatilityScore,climateAdaptability,massAppealScore])},environmentFit:{hot:averageScores([traitScores.hot,traitScores.fresh,climateAdaptability]),cold:averageScores([traitScores.cold,traitScores.warm,climateAdaptability]),ac:averageScores([traitScores.ac,traitScores.clean,versatilityScore]),outdoor:averageScores([traitScores.outdoor,traitScores.woody,traitScores.fresh]),mixed:averageScores([versatilityScore,climateAdaptability,massAppealScore])},sizeProfile:variantSizeProfile,reasons:[`${product.productName} reads as ${dominantFamily} with a ${genderTone} tone`,`${segmentType[0].toUpperCase()}${segmentType.slice(1)} profile with ${Math.round(massAppealScore)} mass-appeal score`,`Projection ${Math.round(projectionScore)} and longevity ${Math.round(longevityScore)}`],layeringCompatibility:[dominantFamily===\"fresh\"?\"citrus boosters\":\"fresh top-ups\",dominantFamily===\"warm\"?\"amber resin accents\":\"soft amber base\",dominantFamily===\"woody\"?\"woods and musks\":\"clean musks\"],similarityCluster:`${segmentType}-${dominantFamily}-${genderTone}`,personaTags:[traitScores.elegant>=70?\"elegant\":\"polished\",traitScores.bold>=70?\"bold\":\"balanced\",traitScores.romantic>=70?\"romantic\":\"versatile\"],moodTags:[traitScores.confident>=70?\"confident\":\"easygoing\",traitScores.energetic>=70?\"energetic\":\"smooth\",traitScores.relaxed>=70?\"comforting\":\"refined\"],noteSignature:[noteHint||dominantFamily,styleHint||genderTone,moodHint||segmentType].filter(Boolean),climateTags:[traitScores.hot>=traitScores.cold?\"warm weather capable\":\"cold weather capable\",climateAdaptability>=70?\"climate flexible\":\"climate specific\",traitScores.day>=traitScores.night?\"day leaning\":\"night leaning\"],keyStrengths:[`${dominantFamily} character`,`${Math.round(complimentFactorScore)} compliment profile`,`${Math.round(versatilityScore)} versatility`,`${Math.round(longevityScore)} longevity`],cautionAreas:[riskIndex>=70?\"more polarizing than average\":\"not highly polarizing\",projectionScore>=75?\"can wear loudly in close spaces\":\"projection stays manageable\",seasonalSpecificity>=70?\"works best in a narrower weather lane\":\"flexible across weather\"],reviewHighlights:[massAppealScore>=75?\"easy to wear for many people\":\"more taste-specific than mass-pleasing\",uniquenessScore>=72?\"feels distinctive in the category\":\"leans familiar and approachable\",purchaseConfidenceScore>=75?\"safe to recommend with confidence\":\"best when matched carefully\"]};return finalizeProductDNA(product.productDNA||{},heuristicDNA)},\"buildProductDNA\");const scoreQuestionAgainstProduct=__name((question,product,productText,productDNA)=>{const answer=normalizeText(getSelectedAnswer(question.preferences,question.key));if(!answer)return null;if(question.key===\"budget\")return scoreBudgetFit(answer,product);if(question.key===\"reference_fragrance\")return scoreReferenceFragrance(answer,product,productText);const traitMap={smell_attraction:{\"fresh & clean\":averageScores([productDNA.traitScores.fresh,productDNA.traitScores.clean,productDNA.traitScores.aquatic]),\"warm & cozy\":averageScores([productDNA.traitScores.warm,productDNA.traitScores.relaxed,productDNA.traitScores.sweet]),\"sweet & gourmand\":averageScores([productDNA.traitScores.sweet,productDNA.traitScores.warm]),\"spicy & bold\":averageScores([productDNA.traitScores.spicy,productDNA.traitScores.bold]),\"dark & smoky\":averageScores([productDNA.traitScores.dark,productDNA.traitScores.bold]),\"not sure yet\":averageScores([productDNA.massAppealScore,productDNA.versatilityScore,100-productDNA.riskIndex])},preferred_notes:{citrus:productDNA.traitScores.fresh,floral:productDNA.traitScores.floral,woody:productDNA.traitScores.woody,vanilla:averageScores([productDNA.traitScores.sweet,productDNA.traitScores.warm]),spicy:productDNA.traitScores.spicy,musky:productDNA.traitScores.musky,\"mixed / not sure\":averageScores([productDNA.versatilityScore,productDNA.massAppealScore])},desired_impression:{\"attractive / seductive\":averageScores([productDNA.traitScores.romantic,productDNA.traitScores.confident,productDNA.complimentFactorScore]),\"professional / clean\":averageScores([productDNA.traitScores.professional,productDNA.traitScores.clean,productDNA.versatilityScore]),\"elegant / classy\":averageScores([productDNA.traitScores.elegant,productDNA.globalSentimentScore]),\"bold / dominant\":averageScores([productDNA.traitScores.bold,productDNA.traitScores.powerful,productDNA.projectionScore]),\"friendly / soft\":averageScores([productDNA.traitScores.friendly,productDNA.traitScores.relaxed,100-productDNA.riskIndex]),\"not decided\":averageScores([productDNA.massAppealScore,productDNA.versatilityScore])},occasion:{\"office / daily\":productDNA.occasionFit.office,date:productDNA.occasionFit.date,party:productDNA.occasionFit.party,\"special event\":productDNA.occasionFit.specialEvent,travel:productDNA.occasionFit.travel,everything:productDNA.occasionFit.everything},time_of_use:{day:productDNA.timeFit.day,night:productDNA.timeFit.night,\"all day\":productDNA.timeFit.allDay},environment:{hot:productDNA.environmentFit.hot,cold:productDNA.environmentFit.cold,ac:productDNA.environmentFit.ac,outdoor:productDNA.environmentFit.outdoor,mixed:productDNA.environmentFit.mixed},trend_preference:{classic:averageScores([productDNA.traitScores.classic,productDNA.massAppealScore]),trending:averageScores([productDNA.popularityTrendScore,productDNA.traitScores.trending]),balanced:averageScores([productDNA.popularityTrendScore,productDNA.massAppealScore,productDNA.versatilityScore])}};if(traitMap[question.key]?.[answer]!==void 0){return traitMap[question.key][answer]}if(question.key===\"signature_preference\"){const targets={\"very safe\":averageScores([100-productDNA.riskIndex,productDNA.massAppealScore,productDNA.versatilityScore]),\"slightly unique\":averageScores([closenessToTarget(productDNA.uniquenessScore,55,25),productDNA.massAppealScore]),balanced:averageScores([closenessToTarget(productDNA.uniquenessScore,60,20),productDNA.versatilityScore]),unique:averageScores([productDNA.uniquenessScore,closenessToTarget(productDNA.massAppealScore,65,30)]),\"very experimental\":averageScores([productDNA.uniquenessScore,productDNA.riskIndex,productDNA.traitScores.bold])};return targets[answer]??55}if(question.key===\"presence_level\"){const targets={\"skin scent\":18,close:35,moderate:55,strong:75,\"very strong\":90};return closenessToTarget(productDNA.projectionScore,targets[answer]??55,25)}if(question.key===\"emotional_effect\"){return{relaxed:productDNA.traitScores.relaxed,confident:productDNA.traitScores.confident,energetic:productDNA.traitScores.energetic,romantic:productDNA.traitScores.romantic,powerful:productDNA.traitScores.powerful}[answer]??55}if(question.key===\"temperature_preference\"){const balance=clampScore(50+(productDNA.traitScores.warm-productDNA.traitScores.fresh)*.5);const targets={\"very fresh\":10,\"slightly fresh\":30,balanced:50,\"slightly warm\":70,\"very warm\":90};return closenessToTarget(balance,targets[answer]??50,22)}if(question.key===\"scent_direction\"){return{\"clean / aquatic\":averageScores([productDNA.traitScores.clean,productDNA.traitScores.aquatic]),\"woody / earthy\":averageScores([productDNA.traitScores.woody,productDNA.traitScores.dark]),\"sweet / dessert-like\":productDNA.traitScores.sweet,\"spicy / oriental\":averageScores([productDNA.traitScores.spicy,productDNA.traitScores.warm]),floral:productDNA.traitScores.floral}[answer]??55}if(question.key===\"segment_preference\"){if(answer===\"no preference\")return averageScores([productDNA.massAppealScore,productDNA.valueScore]);return normalizeText(productDNA.segmentType)===answer?96:closenessToTarget(productDNA.valueScore,answer===\"luxury\"?70:82,28)}if(question.key===\"rejection_triggers\"){const penaltyScores={\"too sweet\":productDNA.traitScores.sweet,\"too strong\":productDNA.projectionScore,\"too synthetic\":100-productDNA.globalSentimentScore,\"too floral\":productDNA.traitScores.floral,\"too spicy\":productDNA.traitScores.spicy,\"no idea\":55};return clampScore(100-(penaltyScores[answer]??45))}if(question.key===\"versatility\"){return{daily:averageScores([productDNA.versatilityScore,productDNA.occasionFit.office]),occasion:averageScores([productDNA.occasionFit.specialEvent,productDNA.occasionFit.party,productDNA.uniquenessScore]),signature:averageScores([productDNA.versatilityScore,productDNA.uniquenessScore,productDNA.complimentFactorScore])}[answer]??55}if(question.key===\"format_strength\"){return{small:productDNA.sizeProfile.small,medium:productDNA.sizeProfile.medium,large:productDNA.sizeProfile.large,strong:averageScores([productDNA.projectionScore,productDNA.longevityScore]),light:averageScores([100-productDNA.projectionScore,productDNA.traitScores.fresh])}[answer]??55}if(question.key===\"brand_familiarity\"){return{\"known brands\":averageScores([productDNA.massAppealScore,productDNA.segmentType===\"designer\"||productDNA.segmentType===\"luxury\"?90:55]),\"explore new\":averageScores([productDNA.uniquenessScore,productDNA.segmentType===\"niche\"?92:55]),both:averageScores([productDNA.massAppealScore,productDNA.uniquenessScore,productDNA.versatilityScore])}[answer]??55}if(question.key===\"performance_expectation\"){return{\"long lasting\":productDNA.longevityScore,\"strong projection\":productDNA.projectionScore,balanced:averageScores([productDNA.versatilityScore,closenessToTarget(productDNA.projectionScore,55,25)]),light:averageScores([100-productDNA.projectionScore,productDNA.traitScores.clean])}[answer]??55}const keywordGroups=answerKeywordMap[question.key]||{};const answerKeywords=keywordGroups[answer];if(answerKeywords?.length)return scoreKeywordAlignment(productText,answerKeywords);const answerTokens=answer.split(/[\\/,&]/).map(token=>token.trim()).filter(Boolean);return scoreKeywordAlignment(productText,answerTokens)},\"scoreQuestionAgainstProduct\");const buildQuestionSetWithPreferences=__name((questions,preferences)=>questions.map(question=>({...question,preferences})),\"buildQuestionSetWithPreferences\");const scoreQuestionGroup=__name((questions,category,preferences,product,productText,productDNA)=>{const group=buildQuestionSetWithPreferences(getVisibleQuestions(questions,preferences).filter(question=>question.category===category),preferences);const answered=group.map(question=>{const answer=getSelectedAnswer(preferences,question.key);if(!answer)return null;return{question,answer,score:scoreQuestionAgainstProduct(question,product,productText,productDNA)}}).filter(Boolean);if(answered.length===0){return{score:50,reasons:[]}}const totalWeight=answered.reduce((sum,item)=>sum+Number(item.question.weight??1),0)||1;const weightedScore=answered.reduce((sum,item)=>sum+Number(item.score??50)*Number(item.question.weight??1),0)/totalWeight;const reasons=answered.filter(item=>Number(item.score??0)>=72).sort((a,b)=>Number(b.score??0)-Number(a.score??0)).slice(0,3).map(item=>`${item.question.label} matched ${item.answer}`);return{score:clampScore(weightedScore),reasons}},\"scoreQuestionGroup\");const scoreProductIntelligence=__name((preferences,product,productText,productDNA,behaviorProfile=null)=>{const price=getLowestVariantPrice(product);const richnessSignals=[product.aiData&&Object.keys(product.aiData).length>0?92:45,product.barcode?.segments?.length?88:45,Object.values(product.fragranceNotes||{}).flat().length?85:45,price?75:55,Array.isArray(product.variants)&&product.variants.length>1?72:60,productDNA.massAppealScore,productDNA.uniquenessScore,productDNA.valueScore,productDNA.complimentFactorScore,productDNA.globalSentimentScore];const contextSignals=[];const budgetAnswer=getSelectedAnswer(preferences,\"budget\");if(budgetAnswer)contextSignals.push(scoreBudgetFit(budgetAnswer,product));const performanceAnswer=normalizeText(getSelectedAnswer(preferences,\"performance_expectation\"));if(performanceAnswer){contextSignals.push(scoreKeywordAlignment(productText,answerKeywordMap.performance_expectation?.[performanceAnswer]||[performanceAnswer]))}const familiarityAnswer=normalizeText(getSelectedAnswer(preferences,\"brand_familiarity\"));if(familiarityAnswer){contextSignals.push(scoreKeywordAlignment(productText,answerKeywordMap.brand_familiarity?.[familiarityAnswer]||[familiarityAnswer]))}const referenceAnswer=getSelectedAnswer(preferences,\"reference_fragrance\");if(referenceAnswer)contextSignals.push(scoreReferenceFragrance(referenceAnswer,product,productText));if(behaviorProfile){contextSignals.push(averageScores([behaviorProfile.productBoosts[product.id]??50,behaviorProfile.brandBoosts[normalizeText(product.brandName)]??50,behaviorProfile.familyBoosts[productDNA.dominantFamily]??50]));contextSignals.push(100-(behaviorProfile.productPenalties[product.id]??0))}const allSignals=[...richnessSignals,...contextSignals];const score=allSignals.reduce((sum,value)=>sum+value,0)/allSignals.length;const reasons=[];if(product.aiData&&Object.keys(product.aiData).length>0)reasons.push(`Its AI scent profile points clearly toward a ${productDNA.dominantFamily} signature`);if(product.barcode?.segments?.length)reasons.push(\"Its barcode structure is complete enough to compare against your profile with confidence\");reasons.push(`It balances broad appeal with enough uniqueness to avoid feeling generic`);if(price)reasons.push(`Its value profile stays convincing around $${price}`);if(productDNA.purchaseConfidenceScore)reasons.push(`Its purchase confidence stays strong for blind recommendation`);return{score:clampScore(score),reasons:reasons.slice(0,3)}},\"scoreProductIntelligence\");const scoreEmbeddingSimilarity=__name(distance=>{if(distance===null||distance===void 0||Number.isNaN(Number(distance)))return 50;return clampScore((1-Number(distance))*100)},\"scoreEmbeddingSimilarity\");const scoreBarcodeCompatibility=__name((personalBarcode,productBarcode)=>{const personalSegments=personalBarcode?.segments||[];const productSegments=productBarcode?.segments||[];if(!personalSegments.length||!productSegments.length){return null}const scores=personalSegments.map(personalSegment=>{const productSegment=productSegments.find(segment=>normalizeText(segment.category)===normalizeText(personalSegment.category));if(!productSegment){return null}const valueMatch=normalizeText(productSegment.value)===normalizeText(personalSegment.value)?100:15;const percentageCloseness=clampScore(100-Math.abs(Number(productSegment.percentage||0)-Number(personalSegment.percentage||0))*2.5);return clampScore(valueMatch*.7+percentageCloseness*.3)}).filter(score=>score!==null);if(!scores.length){return null}return clampScore(scores.reduce((sum,score)=>sum+Number(score),0)/scores.length)},\"scoreBarcodeCompatibility\");const scoreSafety=__name((productText,recommendationScore,productDNA)=>{const safeSignals=scoreKeywordAlignment(productText,[\"versatile\",\"office\",\"daily\",\"balanced\",\"classic\",\"clean\",\"mass appeal\"]);return clampScore(averageScores([recommendationScore,safeSignals,100-productDNA.riskIndex,productDNA.massAppealScore,productDNA.versatilityScore]))},\"scoreSafety\");const scoreBoldness=__name((productText,recommendationScore,productDNA)=>{const boldSignals=scoreKeywordAlignment(productText,[\"bold\",\"intense\",\"unique\",\"niche\",\"dark\",\"smoky\",\"oud\",\"leather\",\"party\",\"night\"]);return clampScore(averageScores([recommendationScore,boldSignals,productDNA.uniquenessScore,productDNA.riskIndex,productDNA.traitScores.bold]))},\"scoreBoldness\");const uniqueInsightList=__name((items=[],limit=4)=>{const seen=new Set;return items.map(item=>String(item||\"\").trim()).filter(Boolean).filter(item=>{const key=normalizeText(item);if(!key||seen.has(key))return false;seen.add(key);return true}).slice(0,limit)},\"uniqueInsightList\");const buildExplainability=__name((userReasons,needReasons,productReasons,productName,productDNA,profileState={uncertaintyLevel:\"normal\",conflictLevel:\"clear\"})=>{const summaryParts=uniqueInsightList([...userReasons,...needReasons,...productReasons],3);const whyChosen=uniqueInsightList([...userReasons,...needReasons,...productReasons,...(productDNA.keyStrengths||[]).map(strength=>`It leans on a clear strength: ${strength}`)],4);const whyBetterThanOthers=uniqueInsightList([`${productName} holds a stronger balance of ${productDNA.dominantFamily} character, compliment pull, and wearability than nearby alternatives`,`Its projection ${Math.round(productDNA.projectionScore)} and longevity ${Math.round(productDNA.longevityScore)} fit your current brief more precisely than lower-ranked options`,profileState.uncertaintyLevel===\"high\"?\"It stayed high because it remains versatile and lower-risk even while your profile still has some broad answers\":\"It stayed high because it satisfies more of your higher-weight answers at the same time\",...productDNA.reviewHighlights?.length?[`Review-style sentiment also supports it: ${productDNA.reviewHighlights[0]}`]:[]],4);const whyTrustThisRecommendation=uniqueInsightList([`Its trust signal is ${Math.round(productDNA.trustSignalScore)} and its purchase confidence is ${Math.round(productDNA.purchaseConfidenceScore)}`,`Its barcode, note structure, and product DNA are all complete enough to score against your profile with confidence`,productDNA.globalSentimentScore>=72?\"Its overall sentiment profile is strong enough to make the recommendation feel safer\":\"It is being recommended because its profile fit beat out weaker options, not because it is universally safe\",...productDNA.reviewHighlights?.slice(0,1).map(highlight=>`What strengthens trust here: ${highlight}`)||[]],4);const whyNow=uniqueInsightList([needReasons[0]?`Right now it fits this moment because ${needReasons[0].charAt(0).toLowerCase()}${needReasons[0].slice(1)}`:\"\",profileState.conflictLevel===\"high\"?\"Your answers contain some tension, so this stayed strong by remaining balanced rather than extreme\":\"\",productDNA.occasionFit?.date>=74?\"It is especially well placed for date-night or evening use right now\":\"\",productDNA.environmentFit?.hot>=74?\"It is currently a better fit for warmer weather conditions\":\"\"],3);return{userDNA:userReasons,needDNA:needReasons,productIntelligence:productReasons,summary:summaryParts.length>0?summaryParts.join(\". \"):`${productName} aligned well with your profile.`,whyChosen,whyBetterThanOthers,whyTrustThisRecommendation,whyNow,confidenceLabel:profileState.uncertaintyLevel===\"high\"?\"Balanced\":void 0}},\"buildExplainability\");const pickBestCandidate=__name((candidates,selector)=>{if(!candidates.length)return null;return[...candidates].sort((a,b)=>selector(b)-selector(a))[0]},\"pickBestCandidate\");const diversifyRecommendations=__name((products,profileState)=>{const selected=[];const brandCounts={};const familyCounts={};const priceBucketCounts={};const pool2=[...products];while(pool2.length>0){let bestIndex=0;let bestScore=-Infinity;pool2.forEach((product,index)=>{const brandKey2=normalizeText(product.brandName);const familyKey2=product.productDNA?.dominantFamily||\"balanced\";const priceKey2=product.productDNA?.priceBucket||\"mid\";const diversityPenalty=(brandCounts[brandKey2]||0)*10+(familyCounts[familyKey2]||0)*8+(priceBucketCounts[priceKey2]||0)*4;const uncertaintyBoost=profileState.uncertaintyLevel===\"high\"?averageScores([product.safeScore,product.productDNA?.massAppealScore])*.08:0;const conflictBoost=profileState.conflictLevel===\"high\"?product.productDNA?.versatilityScore*.06:0;const candidateScore=Number(product.recommendationScore||0)+uncertaintyBoost+conflictBoost-diversityPenalty;if(candidateScore>bestScore){bestScore=candidateScore;bestIndex=index}});const[winner]=pool2.splice(bestIndex,1);selected.push(winner);const brandKey=normalizeText(winner.brandName);const familyKey=winner.productDNA?.dominantFamily||\"balanced\";const priceKey=winner.productDNA?.priceBucket||\"mid\";brandCounts[brandKey]=(brandCounts[brandKey]||0)+1;familyCounts[familyKey]=(familyCounts[familyKey]||0)+1;priceBucketCounts[priceKey]=(priceBucketCounts[priceKey]||0)+1}return selected},\"diversifyRecommendations\");const buildRecommendationBuckets=__name((scoredProducts,profileState={uncertaintyLevel:\"normal\",conflictLevel:\"clear\"})=>{const diversified=diversifyRecommendations(scoredProducts,profileState);const ordered=[...diversified].sort((a,b)=>b.recommendationScore-a.recommendationScore);const perfectPick=ordered[0]||null;const perfectMatches=ordered.slice(0,10);const withoutPerfect=perfectPick?ordered.filter(product=>product.id!==perfectPick.id):ordered;const safePick=pickBestCandidate(withoutPerfect,product=>product.safeScore+product.recommendationScore*.35);const safeMatches=[...withoutPerfect].sort((a,b)=>b.safeScore+b.recommendationScore*.35-(a.safeScore+a.recommendationScore*.35)).slice(0,10);const withoutSafe=safePick?withoutPerfect.filter(product=>product.id!==safePick.id):withoutPerfect;const boldPick=pickBestCandidate(withoutSafe,product=>product.boldnessScore+product.recommendationScore*.35);const boldMatches=[...withoutSafe].sort((a,b)=>b.boldnessScore+b.recommendationScore*.35-(a.boldnessScore+a.recommendationScore*.35)).slice(0,10);const usedIds=new Set([perfectPick?.id,safePick?.id,boldPick?.id].filter(Boolean));const moreMatches=ordered.filter(product=>!usedIds.has(product.id)).slice(0,9);return{safePick,perfectPick,boldPick,safeMatches,perfectMatches,boldMatches,moreMatches,all:ordered}},\"buildRecommendationBuckets\");const detectProfileState=__name((preferences={})=>{const uncertainAnswers=[\"not sure\",\"not sure yet\",\"mixed / not sure\",\"not decided\",\"no preference\",\"no idea\",\"both\",\"everything\"];const selectedAnswers=Object.values(preferences).map(value=>Array.isArray(value)?value[0]:value).map(value=>normalizeText(value)).filter(Boolean);const uncertainCount=selectedAnswers.filter(answer=>uncertainAnswers.includes(answer)).length;const uncertaintyLevel=uncertainCount>=3?\"high\":uncertainCount>=1?\"medium\":\"normal\";const conflictSignals=[];const smellAttraction=normalizeText(getSelectedAnswer(preferences,\"smell_attraction\"));const temperaturePreference=normalizeText(getSelectedAnswer(preferences,\"temperature_preference\"));if(smellAttraction.includes(\"fresh\")&&temperaturePreference.includes(\"warm\"))conflictSignals.push(\"fresh_vs_warm\");if(smellAttraction.includes(\"dark\")&&temperaturePreference.includes(\"fresh\"))conflictSignals.push(\"dark_vs_fresh\");const impression=normalizeText(getSelectedAnswer(preferences,\"desired_impression\"));const signaturePreference=normalizeText(getSelectedAnswer(preferences,\"signature_preference\"));if(impression.includes(\"professional\")&&signaturePreference.includes(\"experimental\"))conflictSignals.push(\"professional_vs_experimental\");const presenceLevel=normalizeText(getSelectedAnswer(preferences,\"presence_level\"));const rejectionTriggers=normalizeText(getSelectedAnswer(preferences,\"rejection_triggers\"));if(presenceLevel.includes(\"very strong\")&&rejectionTriggers.includes(\"strong\"))conflictSignals.push(\"projection_conflict\");return{uncertaintyLevel,conflictLevel:conflictSignals.length>=2?\"high\":conflictSignals.length===1?\"medium\":\"clear\",conflictSignals}},\"detectProfileState\");const getUserBehaviorProfile=__name(async userId=>{if(!dbConnected||!userId){return{productBoosts:{},productPenalties:{},brandBoosts:{},familyBoosts:{},traitBoosts:{},occasionBoosts:{},signalCounts:{},profileMomentum:\"early\",strongestPositiveSignal:\"\",strongestCautionSignal:\"\",learnedTasteSummary:[]}}const result=await pool.query(`SELECT re.product_id, re.event_type, re.metadata, re.created_at, p.brand_name, p.product_name, p.product_dna\n     FROM recommendation_events re\n     LEFT JOIN products p ON p.id = re.product_id\n     WHERE re.user_id = $1\n     ORDER BY re.created_at DESC\n     LIMIT 600`,[userId]);const productBoosts={};const productPenalties={};const brandBoosts={};const familyBoosts={};const traitBoosts={};const occasionBoosts={};const signalCounts={};const now=Date.now();const eventWeightMap={purchase:26,add_to_cart:14,wishlist_save:12,compare_select:9,product_dwell_10:4,product_dwell_30:8,recommendation_impression:1.5,product_click:6,product_view:2,skip:-12,dislike:-18,wishlist_remove:-6};for(const row of result.rows){const eventType=normalizeText(row.event_type);signalCounts[eventType]=(signalCounts[eventType]||0)+1;const brandKey=normalizeText(row.brand_name);const productKey=row.product_id;const productText=normalizeText(`${row.product_name||\"\"} ${row.brand_name||\"\"}`);const eventDate=row.created_at?new Date(row.created_at).getTime():now;const ageDays=Math.max(0,(now-eventDate)/(1e3*60*60*24));const freshnessMultiplier=ageDays<=7?1.35:ageDays<=30?1.15:ageDays<=90?1:.8;const eventWeight=(eventWeightMap[eventType]||0)*freshnessMultiplier;let parsedProductDNA={};if(row.product_dna&&typeof row.product_dna===\"object\"){parsedProductDNA=row.product_dna}else if(typeof row.product_dna===\"string\"){try{parsedProductDNA=JSON.parse(row.product_dna)}catch{parsedProductDNA={}}}const dominantFamily=normalizeText(parsedProductDNA?.dominantFamily||\"\");const traitScores=parsedProductDNA?.traitScores||{};const occasionFit=parsedProductDNA?.occasionFit||{};const positiveEvent=eventWeight>=0;if(positiveEvent){productBoosts[productKey]=(productBoosts[productKey]||0)+eventWeight;if(brandKey)brandBoosts[brandKey]=(brandBoosts[brandKey]||0)+eventWeight*.65}else{productPenalties[productKey]=(productPenalties[productKey]||0)+Math.abs(eventWeight);if(brandKey)brandBoosts[brandKey]=(brandBoosts[brandKey]||0)+eventWeight*.45}if(dominantFamily){familyBoosts[dominantFamily]=(familyBoosts[dominantFamily]||0)+eventWeight*.4}else{if(matchesKeyword(productText,\"oud\")||matchesKeyword(productText,\"leather\")||matchesKeyword(productText,\"smoky\")){familyBoosts.dark=(familyBoosts.dark||0)+eventWeight*.35}if(matchesKeyword(productText,\"fresh\")||matchesKeyword(productText,\"citrus\")||matchesKeyword(productText,\"aquatic\")){familyBoosts.fresh=(familyBoosts.fresh||0)+eventWeight*.35}if(matchesKeyword(productText,\"sweet\")||matchesKeyword(productText,\"vanilla\")||matchesKeyword(productText,\"gourmand\")){familyBoosts.sweet=(familyBoosts.sweet||0)+eventWeight*.35}}Object.entries(traitScores).forEach(([trait,score])=>{if(Number(score)>=60){traitBoosts[trait]=(traitBoosts[trait]||0)+eventWeight*(Number(score)/100)*.3}});Object.entries(occasionFit).forEach(([occasion,score])=>{if(Number(score)>=70){occasionBoosts[occasion]=(occasionBoosts[occasion]||0)+eventWeight*(Number(score)/100)*.24}})}const totalSignals=Object.values(signalCounts).reduce((sum,count)=>sum+Number(count||0),0);const profileMomentum=totalSignals>=60?\"mature\":totalSignals>=30?\"strong\":totalSignals>=12?\"building\":\"early\";const strongestPositiveSignal=[...Object.entries(brandBoosts).map(([key,value])=>({label:`Brand leaning: ${key}`,value:Number(value)})),...Object.entries(familyBoosts).map(([key,value])=>({label:`Family leaning: ${key}`,value:Number(value)})),...Object.entries(traitBoosts).map(([key,value])=>({label:`Trait leaning: ${key}`,value:Number(value)}))].sort((a,b)=>b.value-a.value)[0]?.label||\"Your positive taste signals are still building\";const strongestCautionSignal=[...Object.entries(productPenalties).map(([key,value])=>({label:`Repeated rejection around product ${key}`,value:Number(value)})),...Object.entries(brandBoosts).filter(([,value])=>Number(value)<0).map(([key,value])=>({label:`Brand caution: ${key}`,value:Math.abs(Number(value))})),...Object.entries(familyBoosts).filter(([,value])=>Number(value)<0).map(([key,value])=>({label:`Family caution: ${key}`,value:Math.abs(Number(value))}))].sort((a,b)=>b.value-a.value)[0]?.label||\"\";const learnedTasteSummary=[signalCounts.purchase?`Purchases now count most heavily because they confirm true satisfaction better than browsing alone.`:\"\",signalCounts.wishlist_save?`Saved fragrances are nudging the engine toward the styles you want to revisit later.`:\"\",signalCounts.compare_select?`Compare behavior is sharpening fine-grained decisions between close alternatives.`:\"\",signalCounts.product_dwell_30||signalCounts.product_dwell_10?`Longer reading time now increases trust around fragrances that truly hold attention.`:\"\",signalCounts.skip||signalCounts.dislike?`Skipped and disliked fragrances now actively pull similar profiles down.`:\"\",totalSignals>=20?`Long-term weighting is active, so recent actions matter most but older favorites still shape the profile.`:\"\"].filter(Boolean);return{productBoosts,productPenalties,brandBoosts,familyBoosts,traitBoosts,occasionBoosts,signalCounts,profileMomentum,strongestPositiveSignal,strongestCautionSignal,learnedTasteSummary}},\"getUserBehaviorProfile\");const getWeightedEntries=__name((record={},limit=4)=>{return Object.entries(record||{}).sort((a,b)=>Number(b[1])-Number(a[1])).slice(0,limit)},\"getWeightedEntries\");const pickFirstUnusedRecommendation=__name((products=[],usedIds=new Set)=>{for(const product of products){if(product&&!usedIds.has(product.id)){usedIds.add(product.id);return product}}return products[0]||null},\"pickFirstUnusedRecommendation\");const getProductBehaviorSignals=__name(async productId=>{if(!dbConnected||!productId)return{};const result=await pool.query(`SELECT event_type, COUNT(*)::int as count\n     FROM recommendation_events\n     WHERE product_id = $1\n     GROUP BY event_type`,[productId]);return result.rows.reduce((acc,row)=>{acc[row.event_type]=Number(row.count||0);return acc},{})},\"getProductBehaviorSignals\");const validateProductDNA=__name((product,dna={},eventSignals={})=>{const noteCount=Object.values(product?.fragranceNotes||{}).flat().filter(Boolean).length;const traitEntries=Object.values(dna?.traitScores||{}).filter(value=>Number(value)>0);const occasionEntries=Object.values(dna?.occasionFit||{}).filter(value=>Number(value)>0);const completenessScore=averageScores([product?.aiData&&Object.keys(product.aiData||{}).length>0?94:44,product?.barcode?.segments?.length?96:42,noteCount>0?clampScore(55+noteCount*8):35,traitEntries.length>=8?86:traitEntries.length>=5?72:48,(dna?.reasons||[]).length>0?74:42,(dna?.reviewHighlights||[]).length>0?72:46]);const dominantFamily=normalizeText(dna?.dominantFamily||\"\");const dominantTraitScore=dominantFamily&&dna?.traitScores?.[dominantFamily]?Number(dna.traitScores[dominantFamily]):60;const hotColdGap=Math.abs(Number(dna?.environmentFit?.hot||0)-Number(dna?.environmentFit?.cold||0));const dayNightGap=Math.abs(Number(dna?.timeFit?.day||0)-Number(dna?.timeFit?.night||0));const coherenceScore=averageScores([dominantTraitScore,clampScore(100-hotColdGap*.45),clampScore(100-dayNightGap*.35),averageScores([dna?.trustSignalScore,dna?.globalSentimentScore,dna?.purchaseConfidenceScore]),occasionEntries.length>=4?82:58]);const calibrationScore=averageScores([dna?.trustSignalScore,dna?.purchaseConfidenceScore,dna?.globalSentimentScore,dna?.complimentFactorScore,clampScore(55+Number(eventSignals.purchase||0)*3+Number(eventSignals.wishlist_save||0)*1.3-Number(eventSignals.dislike||0)*2.2)]);const warnings=[!product?.barcode?.segments?.length?\"Barcode coverage is still incomplete for this fragrance.\":\"\",noteCount<3?\"Fragrance notes are still light, so the DNA has less supporting scent evidence.\":\"\",dominantTraitScore<55?\"Dominant family and trait profile are not fully aligned yet.\":\"\",calibrationScore<62?\"Behavior calibration is still early, so confidence should be treated as provisional.\":\"\"].filter(Boolean);const confidenceLabel=calibrationScore>=84&&coherenceScore>=82&&completenessScore>=82?\"Elite\":calibrationScore>=74&&coherenceScore>=72?\"Strong\":calibrationScore>=62?\"Promising\":\"Watch\";return{completenessScore,coherenceScore,calibrationScore,confidenceLabel,warnings:warnings.slice(0,4)}},\"validateProductDNA\");const buildProductSocialProof=__name((product,dna={},eventSignals={})=>{const views=Number(eventSignals.product_view||0);const clicks=Number(eventSignals.product_click||0);const saves=Number(eventSignals.wishlist_save||0);const carts=Number(eventSignals.add_to_cart||0);const purchases=Number(eventSignals.purchase||0);const dislikes=Number(eventSignals.dislike||0)+Number(eventSignals.skip||0);const confidence=Math.round(Number(dna?.purchaseConfidenceScore||0));const trust=Math.round(Number(dna?.trustSignalScore||0));const sentiment=Math.round(Number(dna?.globalSentimentScore||0));return{counts:{views,clicks,saves,carts,purchases,dislikes},headline:purchases>0?\"Behavior-backed favorite\":saves>0?\"High save interest\":confidence>=78?\"High-confidence recommendation\":\"Emerging trust candidate\",trustScore:trust,confidenceScore:confidence,sentimentScore:sentiment,statements:uniqueInsightList([purchases>0?`Purchase activity is already reinforcing confidence around ${product.productName}.`:\"\",saves>dislikes?\"Save intent is currently stronger than negative feedback.\":\"\",views>10?\"This fragrance keeps earning repeat attention during browsing.\":\"\",confidence>=80?`Its purchase confidence is already sitting at ${confidence}, which is strong for blind recommendation.`:\"\",trust>=80?`Its trust signal sits at ${trust}, supported by Product DNA completeness and scent evidence.`:\"\",dislikes>0?\"There is some selective feedback, so it suits a more specific taste lane.\":\"Negative feedback is currently very low.\"],4)}},\"buildProductSocialProof\");const calibrateProductDNA=__name(async(product,dna={})=>{const baseDNA=finalizeProductDNA(dna,dna);const eventSignals=await getProductBehaviorSignals(product?.id);const views=Number(eventSignals.product_view||0);const clicks=Number(eventSignals.product_click||0);const saves=Number(eventSignals.wishlist_save||0);const carts=Number(eventSignals.add_to_cart||0);const purchases=Number(eventSignals.purchase||0);const dislikes=Number(eventSignals.dislike||0)+Number(eventSignals.skip||0);const profileCompleteness=averageScores([product?.aiData&&Object.keys(product.aiData||{}).length>0?92:48,product?.barcode?.segments?.length?94:44,Object.values(product?.fragranceNotes||{}).flat().length>0?88:52,Array.isArray(product?.variants)&&product.variants.length>0?74:56,Array.isArray(baseDNA.reviewHighlights)&&baseDNA.reviewHighlights.length>0?76:54]);const engagementScore=clampScore(48+views*.18+clicks*.55+saves*1.4+carts*1.9+purchases*3.2-dislikes*2.6);const trustSignalScore=averageScores([baseDNA.trustSignalScore,baseDNA.globalSentimentScore,baseDNA.valueScore,profileCompleteness,engagementScore]);const purchaseConfidenceScore=averageScores([baseDNA.purchaseConfidenceScore,trustSignalScore,baseDNA.complimentFactorScore,100-baseDNA.riskIndex,clampScore(55+saves*1.5+carts*1.8+purchases*2.4-dislikes*1.5)]);const popularityTrendScore=averageScores([baseDNA.popularityTrendScore,engagementScore,clampScore(52+clicks*.75+saves*1.2+purchases*2.2-dislikes*.9)]);const globalSentimentScore=averageScores([baseDNA.globalSentimentScore,trustSignalScore,clampScore(72-dislikes*2.4+purchases*1.3+saves*.8)]);const complimentFactorScore=averageScores([baseDNA.complimentFactorScore,clampScore(58+saves*1.2+purchases*1.7-dislikes*1.1),baseDNA.massAppealScore]);const riskIndex=clampScore(averageScores([baseDNA.riskIndex,baseDNA.uniquenessScore,dislikes>0?clampScore(58+dislikes*3.2):34])-Math.min(saves+purchases,18)*.35);const validation=validateProductDNA(product,{...baseDNA,trustSignalScore,purchaseConfidenceScore,popularityTrendScore,globalSentimentScore,complimentFactorScore,riskIndex},eventSignals);return finalizeProductDNA({...baseDNA,trustSignalScore,purchaseConfidenceScore,popularityTrendScore,globalSentimentScore,complimentFactorScore,riskIndex,keyStrengths:uniqueInsightList([...baseDNA.keyStrengths||[],profileCompleteness>=78?\"Its Product DNA is fully calibrated with strong data coverage\":\"\",purchases>0?\"Purchase behavior reinforces recommendation confidence\":\"\",saves>=2?\"Customers save it before committing, which supports intent strength\":\"\"],4),cautionAreas:uniqueInsightList([...baseDNA.cautionAreas||[],dislikes>1?\"Negative feedback suggests it appeals to a more selective taste lane\":\"\",profileCompleteness<62?\"Some supporting scent data is still lighter than ideal for full trust\":\"\"],4),reviewHighlights:uniqueInsightList([...baseDNA.reviewHighlights||[],purchases>1?\"Purchase behavior gives it stronger real-world recommendation proof\":\"\",saves>dislikes?\"Save activity currently outweighs negative feedback\":\"\",dislikes>0?\"More selective than universally easy-going\":\"Very low negative feedback in current learning signals\"],4),reasons:uniqueInsightList([...baseDNA.reasons||[],`Calibration blended ${views+clicks+saves+carts+purchases+dislikes} live interaction signals into its Product DNA`,`Trust ${Math.round(trustSignalScore)} and purchase confidence ${Math.round(purchaseConfidenceScore)} are now behavior-aware`],4),validation},baseDNA)},\"calibrateProductDNA\");const getFallbackAttributeConfigFromAIData=__name((aiData={})=>{return Object.keys(aiData).map(key=>({key,label:key.split(\"_\").map(part=>part.charAt(0).toUpperCase()+part.slice(1)).join(\" \")}))},\"getFallbackAttributeConfigFromAIData\");const buildProductBarcodeFromAIData=__name((aiData={},attributes=[])=>{const activeAttributes=Array.isArray(attributes)&&attributes.length>0?attributes:getFallbackAttributeConfigFromAIData(aiData);if(activeAttributes.length===0){return{segments:[]}}const rawWeights=[];const segments=activeAttributes.map((attr,index)=>{const data=aiData?.[attr.key];let value=\"\";let weight=0;if(data&&typeof data===\"object\"&&!Array.isArray(data)){const sorted=Object.entries(data).sort(([,a],[,b])=>Number(b)-Number(a));if(sorted.length>0){value=String(sorted[0][0]);weight=Number(sorted[0][1])||0}}rawWeights.push(Math.max(weight,0));return{category:attr.label,value:value||\"N/A\",percentage:0,color:BARCODE_COLORS[index%BARCODE_COLORS.length]}});const totalWeight=rawWeights.reduce((sum,weight)=>sum+weight,0);const equalPercentage=Number((100/segments.length).toFixed(1));segments.forEach((segment,index)=>{segment.percentage=totalWeight>0?Number((rawWeights[index]/totalWeight*100).toFixed(1)):equalPercentage});const total=segments.reduce((sum,segment)=>sum+segment.percentage,0);if(segments.length>0&&total!==100){const diff=Number((100-total).toFixed(1));segments[segments.length-1].percentage=Number((segments[segments.length-1].percentage+diff).toFixed(1))}return{segments}},\"buildProductBarcodeFromAIData\");const regenerateAllProductBarcodes=__name(async()=>{const attributesResult=await pool.query(\"SELECT key, label FROM ai_attribute_config\");const attributes=attributesResult.rows;const productsResult=await pool.query(`\n    SELECT id, product_name, ai_data\n    FROM products\n    WHERE status = 'PUBLISHED' OR status = 'DRAFT' OR status = 'ARCHIVED'\n  `);let updated=0;let skipped=0;for(const product of productsResult.rows){const aiData=product.ai_data||{};if(!aiData||Object.keys(aiData).length===0){skipped+=1;continue}const barcode=buildProductBarcodeFromAIData(aiData,attributes);await pool.query(\"UPDATE products SET barcode = $1, updated_at = $2 WHERE id = $3\",[JSON.stringify(barcode),new Date().toISOString(),product.id]);updated+=1}return{updated,skipped,total:productsResult.rows.length}},\"regenerateAllProductBarcodes\");const regenerateAllProductDNA=__name(async()=>{const productsResult=await pool.query(`\n    SELECT *\n    FROM products\n    WHERE status = 'PUBLISHED' OR status = 'DRAFT' OR status = 'ARCHIVED'\n  `);let updated=0;let skipped=0;for(const row of productsResult.rows){const product=mapProductFromDB(row);const productText=buildProductProfileText(product);const heuristicDNA=buildProductDNA({...product,productDNA:{}},productText);const enrichedDNA=await enrichProductDNAWithBedrock(product,heuristicDNA);const calibratedDNA=await calibrateProductDNA(product,enrichedDNA);if(!calibratedDNA||Object.keys(calibratedDNA).length===0){skipped+=1;continue}await pool.query(\"UPDATE products SET product_dna = $1, updated_at = $2 WHERE id = $3\",[JSON.stringify(calibratedDNA),new Date().toISOString(),product.id]);updated+=1}return{updated,skipped,total:productsResult.rows.length}},\"regenerateAllProductDNA\");const getRankedRecommendationsForProfile=__name(async({userId=null,preferences={},personalBarcode={},limit=24})=>{console.log(`[ENGINE] Ranking recommendations for ${userId||\"tool-session\"} with ${Object.keys(preferences||{}).length} preference keys`);const questions=await getQuestionConfigs();const visibleQuestions=getVisibleQuestions(questions,preferences);const hasMeaningfulPreferences=Object.keys(preferences||{}).length>0&&visibleQuestions.length>0;const profileState=detectProfileState(preferences);const behaviorProfile=userId?await getUserBehaviorProfile(String(userId)):{productBoosts:{},productPenalties:{},brandBoosts:{},familyBoosts:{},traitBoosts:{},occasionBoosts:{},signalCounts:{},profileMomentum:\"early\",strongestPositiveSignal:\"No strong signal yet\",strongestCautionSignal:\"\",learnedTasteSummary:[]};let embeddingVector=null;if(hasMeaningfulPreferences){const profileText=buildPreferenceText(questions,preferences);const barcodeText=personalBarcode?.segments?.map(segment=>`${segment.category}: ${segment.value}`).join(\", \")||\"\";const vector=await generateEmbedding(`${profileText}. Barcode Signature: ${barcodeText}`);if(vector){embeddingVector=`[${vector.join(\",\")}]`}}let productRows=[];if(embeddingVector){const scoredRes=await pool.query(`\n      SELECT *, (embedding <=> $1::vector) as distance\n      FROM products\n      WHERE status = 'PUBLISHED'\n        AND embedding IS NOT NULL\n      ORDER BY distance ASC\n      LIMIT 40\n    `,[embeddingVector]);productRows=scoredRes.rows}if(productRows.length<limit){const fallbackRes=await pool.query(`\n      SELECT *\n      FROM products\n      WHERE status = 'PUBLISHED'\n      ORDER BY created_at DESC\n      LIMIT 40\n    `);const knownIds=new Set(productRows.map(row=>row.id));for(const row of fallbackRes.rows){if(!knownIds.has(row.id)){productRows.push(row);knownIds.add(row.id)}}}const mappedProducts=productRows.map(mapProductFromDB);if(!hasMeaningfulPreferences){console.log(\"[ENGINE] No meaningful preferences found, returning fallback products\");const fallbackProducts=mappedProducts.slice(0,limit);return{safePick:fallbackProducts[0]||null,perfectPick:fallbackProducts[1]||fallbackProducts[0]||null,boldPick:fallbackProducts[2]||fallbackProducts[0]||null,safeMatches:fallbackProducts.slice(0,4),perfectMatches:fallbackProducts.slice(0,4),boldMatches:fallbackProducts.slice(0,4),moreMatches:fallbackProducts.slice(3,8),all:fallbackProducts}}const scoredProducts=mappedProducts.map(product=>{const productText=buildProductProfileText(product);const productDNA=buildProductDNA(product,productText);const userDNA=scoreQuestionGroup(questions,\"USER_DNA\",preferences,product,productText,productDNA);const needDNA=scoreQuestionGroup(questions,\"NEED_DNA\",preferences,product,productText,productDNA);const productIntelligence=scoreProductIntelligence(preferences,product,productText,productDNA,behaviorProfile);const embeddingScore=scoreEmbeddingSimilarity(product.distance);const dnaScore=userDNA.score*.45+needDNA.score*.3+productIntelligence.score*.25;const traitBoost=Object.entries(productDNA.traitScores||{}).reduce((sum,[trait,value])=>{const normalizedTrait=normalizeText(trait);const boost=Number(behaviorProfile.traitBoosts?.[normalizedTrait]||0);if(!boost)return sum;return sum+boost*((Number(value)||0)/100)},0);const occasionBoost=Object.entries(productDNA.occasionFit||{}).reduce((sum,[occasion,value])=>{const normalizedOccasion=normalizeText(occasion);const boost=Number(behaviorProfile.occasionBoosts?.[normalizedOccasion]||0);if(!boost)return sum;return sum+boost*((Number(value)||0)/100)},0);const behaviorBoost=clampScore((behaviorProfile.productBoosts?.[product.id]||0)+(behaviorProfile.brandBoosts?.[normalizeText(product.brandName)]||0)+(behaviorProfile.familyBoosts?.[productDNA.dominantFamily]||0)+traitBoost+occasionBoost+(behaviorProfile.productPenalties?.[product.id]||0),-20,20);const recommendationScore=clampScore(dnaScore*.7+embeddingScore*.2+(50+behaviorBoost)*.1);const barcodeMatchScore=scoreBarcodeCompatibility(personalBarcode,product.barcode);const matchPercentage=clampScore(barcodeMatchScore===null||barcodeMatchScore===void 0?recommendationScore:recommendationScore*.55+barcodeMatchScore*.45);const safeScore=scoreSafety(productText,recommendationScore,productDNA);const boldnessScore=scoreBoldness(productText,recommendationScore,productDNA);return{...product,recommendationScore:Number(recommendationScore.toFixed(1)),matchPercentage:Number(matchPercentage.toFixed(1)),userDNAScore:Number(userDNA.score.toFixed(1)),needDNAScore:Number(needDNA.score.toFixed(1)),productIntelligenceScore:Number(productIntelligence.score.toFixed(1)),embeddingScore:Number(embeddingScore.toFixed(1)),barcodeMatchScore:barcodeMatchScore===null||barcodeMatchScore===void 0?void 0:Number(barcodeMatchScore.toFixed(1)),safeScore:Number(safeScore.toFixed(1)),boldnessScore:Number(boldnessScore.toFixed(1)),productDNA,explainability:buildExplainability(userDNA.reasons,needDNA.reasons,productIntelligence.reasons,product.productName,productDNA,profileState)}});const buckets=buildRecommendationBuckets(scoredProducts,profileState);console.log(`[ENGINE] Ranked ${scoredProducts.length} products. Perfect pick: ${buckets?.perfectPick?.productName||\"none\"}`);return buckets},\"getRankedRecommendationsForProfile\");const mergePreferenceProfiles=__name((...profiles)=>{return profiles.reduce((acc,profile)=>{Object.entries(profile||{}).forEach(([key,value])=>{if(value===void 0||value===null||value===\"\")return;acc[key]=Array.isArray(value)?Array.from(new Set([...acc[key]||[],...value].filter(Boolean))):value});return acc},{})},\"mergePreferenceProfiles\");const dedupeRecommendations=__name((products=[])=>{const seen=new Set;return products.filter(product=>{if(!product?.id||seen.has(product.id))return false;seen.add(product.id);return true})},\"dedupeRecommendations\");const flattenRecommendationBuckets=__name(buckets=>{return dedupeRecommendations([...buckets?.all||[],...buckets?.perfectMatches||[],...buckets?.safeMatches||[],...buckets?.boldMatches||[],...buckets?.moreMatches||[],buckets?.perfectPick,buckets?.safePick,buckets?.boldPick].filter(Boolean))},\"flattenRecommendationBuckets\");const summarizeEchoProfile=__name((behaviorProfile={})=>{return{dominantFamilies:getWeightedEntries(behaviorProfile.familyBoosts||{},3).map(([family])=>family),dominantTraits:getWeightedEntries(behaviorProfile.traitBoosts||{},4).map(([trait])=>trait),dominantOccasions:getWeightedEntries(behaviorProfile.occasionBoosts||{},3).map(([occasion])=>occasion)}},\"summarizeEchoProfile\");app.get(\"/api/logs\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});try{const result=await pool.query(\"SELECT * FROM system_logs ORDER BY timestamp DESC LIMIT 100\");res.json(result.rows)}catch(err){console.error(\"Get Logs Error:\",err.message);res.status(500).json({error:\"Failed to fetch logs\"})}});app.get(\"/api/db/status\",async(req,res)=>{if(!dbConnected){return res.json({connected:false,error:\"Database not connected. Please check your DATABASE_URL environment variable.\"})}try{const client=await pool.connect();const extResult=await client.query(\"SELECT * FROM pg_extension WHERE extname = 'vector'\");const isVectorInstalled=extResult.rows.length>0;const colResult=await client.query(\"SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'products' AND column_name = 'embedding'\");const hasColumn=colResult.rows.length>0;let vectorCount=0;let totalCount=0;if(hasColumn){const countRes=await client.query(\"SELECT count(*) as total, count(embedding) as vectors FROM products\");totalCount=parseInt(countRes.rows[0].total);vectorCount=parseInt(countRes.rows[0].vectors)}client.release();res.json({connected:true,pgvectorInstalled:isVectorInstalled,embeddingColumn:hasColumn,vectorCount,totalCount,dbName:\"database\"in dbConfig?dbConfig.database:\"postgres\",host:\"host\"in dbConfig?dbConfig.host:\"DATABASE_URL\"})}catch(e){console.error(\"DB Status Check Failed\",e);res.status(500).json({connected:false,error:e.message})}});app.get(\"/api/admin/attributes\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});try{const result=await pool.query(\"SELECT * FROM ai_attribute_config\");res.json(result.rows)}catch(err){console.error(\"Get Attributes Error:\",err.message);res.status(500).json({error:\"Failed to fetch attributes\"})}});app.post(\"/api/admin/attributes\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{attributes}=req.body;if(!Array.isArray(attributes)){return res.status(400).json({error:\"Invalid format. Expected array of attributes.\"})}const client=await pool.connect();try{await client.query(\"BEGIN\");await client.query(\"DELETE FROM ai_attribute_config\");for(const attr of attributes){await client.query(`INSERT INTO ai_attribute_config (key, label, values) VALUES ($1, $2, $3)`,[attr.key,attr.label,JSON.stringify(attr.values)])}await client.query(\"COMMIT\");await addLog(\"INFO\",\"ADMIN\",\"Updated AI Attribute Configuration\");(async()=>{try{const repairResult=await regenerateAllProductBarcodes();console.log(`[ADMIN] Automatically updated barcodes for ${repairResult.updated} products.`)}catch(e){console.error(\"Failed to auto-update barcodes:\",e.message)}})();res.json({success:true})}catch(err){await client.query(\"ROLLBACK\");console.error(\"Update Attributes Error:\",err.message);res.status(500).json({error:\"Failed to update attributes\"})}finally{client.release()}});app.post(\"/api/admin/products/repair-barcodes\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});try{const result=await regenerateAllProductBarcodes();await addLog(\"SUCCESS\",\"ADMIN\",`Regenerated product barcodes for ${result.updated} products`);res.json({success:true,...result})}catch(err){console.error(\"Repair Product Barcodes Error:\",err.message);res.status(500).json({error:\"Failed to regenerate product barcodes\"})}});app.post(\"/api/admin/products/repair-product-dna\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});try{const result=await regenerateAllProductDNA();await addLog(\"SUCCESS\",\"ADMIN\",`Regenerated Product DNA for ${result.updated} products`);res.json({success:true,...result})}catch(err){console.error(\"Repair Product DNA Error:\",err.message);res.status(500).json({error:\"Failed to regenerate Product DNA\"})}});app.post(\"/api/admin/products/calibrate-product-dna\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});try{const productsResult=await pool.query(`\n      SELECT *\n      FROM products\n      WHERE status = 'PUBLISHED' OR status = 'DRAFT' OR status = 'ARCHIVED'\n    `);let updated=0;let skipped=0;for(const row of productsResult.rows){const product=mapProductFromDB(row);const calibratedDNA=await calibrateProductDNA(product,buildProductDNA(product,buildProductProfileText(product)));if(!calibratedDNA||Object.keys(calibratedDNA).length===0){skipped+=1;continue}await pool.query(\"UPDATE products SET product_dna = $1, updated_at = $2 WHERE id = $3\",[JSON.stringify(calibratedDNA),new Date().toISOString(),product.id]);updated+=1}await addLog(\"SUCCESS\",\"ADMIN\",`Calibrated Product DNA for ${updated} products`);res.json({success:true,updated,skipped,total:productsResult.rows.length})}catch(err){console.error(\"Calibrate Product DNA Error:\",err.message);res.status(500).json({error:\"Failed to calibrate Product DNA\"})}});app.get(\"/api/admin/products/product-dna-health\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});try{const productsResult=await pool.query(`\n      SELECT *\n      FROM products\n      WHERE status = 'PUBLISHED' OR status = 'DRAFT' OR status = 'ARCHIVED'\n    `);const products=productsResult.rows.map(mapProductFromDB);const validations=products.map(product=>{const dna=finalizeProductDNA(product.productDNA||{},buildProductDNA(product,buildProductProfileText(product)));return dna.validation||{}}).filter(Boolean);const averageOf=__name(selector=>validations.length?Math.round(validations.reduce((sum,item)=>sum+Number(selector(item)||0),0)/validations.length):0,\"averageOf\");res.json({totalProducts:products.length,averageCompleteness:averageOf(item=>item.completenessScore),averageCoherence:averageOf(item=>item.coherenceScore),averageCalibration:averageOf(item=>item.calibrationScore),flaggedProducts:validations.filter(item=>Number(item.calibrationScore||0)<62||Number(item.completenessScore||0)<60).length,eliteProducts:validations.filter(item=>String(item.confidenceLabel||\"\")===\"Elite\").length})}catch(err){console.error(\"Product DNA Health Error:\",err.message);res.status(500).json({error:\"Failed to load Product DNA health\"})}});app.post(\"/api/ai/generate\",async(req,res)=>{const{productName,brandName,description}=req.body;console.log(`\n\\u{1F916} [AI START] Generating attributes for: \"${productName}\"`);await addLog(\"INFO\",\"AI_SERVICE\",`Starting generation for: ${productName} (Bedrock)`);if(!process.env.AWS_ACCESS_KEY_ID){await addLog(\"ERROR\",\"AI_SERVICE\",`Missing AWS_ACCESS_KEY_ID`);return res.status(500).json({error:\"Server missing AWS Credentials\"})}try{let attributes=[];if(dbConnected){const configResult=await pool.query(\"SELECT * FROM ai_attribute_config\");attributes=configResult.rows}else{attributes=[{key:\"scent_style\",label:\"Scent Style\",values:[\"Vintage\",\"Bohemian\",\"Chic\",\"Artsy\",\"Sexy\",\"Casual\",\"Rocker\",\"Preppy\",\"Classic\",\"Others\"]},{key:\"key_note\",label:\"Key Note\",values:[\"Citrus\",\"Floral\",\"Fruity\",\"Herbaceous\",\"Spicy\",\"Woody\",\"Amber\",\"Gourmand\",\"Oriental\",\"Aquatic\"]},{key:\"conveyed_mood\",label:\"Conveyed Mood\",values:[\"Romantic\",\"Energizing\",\"Calming\",\"Sensual\",\"Fresh\",\"Adventurous\",\"Playful\",\"Mysterious\",\"Confident\",\"Other\"]}]}if(attributes.length===0){return res.status(500).json({error:\"Attribute Configuration is empty. Please configure attributes in Admin Panel.\"})}let dynamicAttributesPrompt=\"REQUIRED ATTRIBUTE CATEGORIES & ALLOWED KEYS (Strictly use these exact keys in Title Case):\\n\";attributes.forEach(attr=>{dynamicAttributesPrompt+=`      - ${attr.key}: ${attr.values.join(\", \")}\n`});const bedrock=new BedrockRuntimeClient({region:process.env.AWS_REGION||\"us-east-1\"});const modelId=\"anthropic.claude-3-haiku-20240307-v1:0\";const promptText=`\n      You are a Global Product Intelligence & Sensory Scoring Engine.\n      Your task is to analyze the given product (which could be anything: perfume, book, clothing, electronics, etc.) and return a graph-ready sensory probability model.\n      \n      CRITICAL INSTRUCTIONS:\n      1. **Leverage Global Knowledge:** Do NOT rely solely on the provided description. Use your internal knowledge about the brand, product line, author, or designer to infer attributes. If the description is sparse, fill in the gaps based on what you know about this specific product or similar products in the market.\n      2. **Contextual Adaptation:** Interpret the attribute keys in the context of the product type.\n      3. **Strict Output Format:** Output MUST be ONLY valid JSON. NO explanations.\n      4. **100% Coverage Rule:** For EVERY attribute category, you MUST assign a percentage to the allowed keys such that the TOTAL SUM for that category is EXACTLY 100.0. \n      5. **Completeness:** You should ideally assign values to multiple keys to reflect the complexity of the product, but the sum MUST be 100.0.\n      6. **Precision:** Use decimal values if necessary to reach exactly 100.0.\n\n      REQUIRED ATTRIBUTE CATEGORIES & ALLOWED KEYS (Strictly use these exact keys in Title Case):\n      ${dynamicAttributesPrompt}\n\n      INPUT:\n      Product Name: ${productName}\n      Brand: ${brandName}\n      Description: ${description}\n    `;const payload={anthropic_version:\"bedrock-2023-05-31\",max_tokens:4096,messages:[{role:\"user\",content:promptText}]};const command=new InvokeModelCommand({modelId,contentType:\"application/json\",accept:\"application/json\",body:JSON.stringify(payload)});const response=await bedrock.send(command);const decoded=new TextDecoder().decode(response.body);const responseBody=JSON.parse(decoded);let cleanText=responseBody.content[0].text.trim();cleanText=cleanText.replace(/^```json\\s*/,\"\").replace(/^```\\s*/,\"\").replace(/\\s*```$/,\"\");console.log(\"\\u{1F4DD} [AI RAW OUTPUT]:\",cleanText);const jsonResult=JSON.parse(cleanText);Object.keys(jsonResult).forEach(category=>{const values=jsonResult[category];if(typeof values===\"object\"&&values!==null){const entries=Object.entries(values);const sum=entries.reduce((acc,[,val])=>acc+Number(val),0);if(sum>0&&Math.abs(sum-100)>.01){console.log(`\\u2696\\uFE0F Normalizing ${category} (Sum was ${sum})`);Object.keys(values).forEach(key=>{values[key]=Number((Number(values[key])/sum*100).toFixed(2))});const newSum=Object.values(values).reduce((a,b)=>a+b,0);if(newSum!==100){const firstKey=Object.keys(values)[0];values[firstKey]=Number((values[firstKey]+(100-newSum)).toFixed(2))}}}});console.log(\"\\u2705 [AI SUCCESS] JSON parsed and normalized. Keys:\",Object.keys(jsonResult));await addLog(\"SUCCESS\",\"AI_SERVICE\",`Graph attributes generated for: ${productName}`);res.json(jsonResult)}catch(error){console.error(\"\\u274C [AI FAILURE] Error:\",error.message);await addLog(\"ERROR\",\"AI_SERVICE\",`Generation failed for ${productName}: ${error.message}`);res.status(500).json({error:\"AI Generation Failed\",details:error.message})}});app.post(\"/api/recommendations\",async(req,res)=>{const{preferences,userId}=req.body;if(!dbConnected){return res.json([])}try{let embeddingVector=null;let genderFilter=null;if(userId){const userRes=await pool.query(\"SELECT embedding, preferences FROM users WHERE id = $1\",[userId]);if(userRes.rows.length>0){const user=userRes.rows[0];if(user.embedding){embeddingVector=user.embedding}if(user.preferences&&user.preferences.gender){genderFilter=user.preferences.gender[0]}}}if(!embeddingVector&&preferences){const configResult=await pool.query(\"SELECT * FROM ai_attribute_config\");const attributes=configResult.rows;let syntheticProfile=\"AI Sensory Profile: \";attributes.forEach(attr=>{const key=attr.key;if(preferences[key]&&Array.isArray(preferences[key])&&preferences[key].length>0){syntheticProfile+=`${key}: ${preferences[key].join(\" \")}. `}});if(preferences.keywords){syntheticProfile+=`keywords: ${preferences.keywords}.`}const vector=await generateEmbedding(syntheticProfile);if(vector){embeddingVector=`[${vector.join(\",\")}]`}if(preferences.gender){genderFilter=preferences.gender[0]}}if(!embeddingVector){return res.status(400).json({error:\"Preferences or stored profile required\"})}let query=`\n      SELECT *, (embedding <=> $1::vector) as distance \n      FROM products \n      WHERE status = 'PUBLISHED'\n    `;const params=[embeddingVector];if(genderFilter){query+=` AND (ai_data->'gender'->>$2)::numeric > 30`;params.push(genderFilter)}query+=` ORDER BY distance ASC LIMIT 6`;const result=await pool.query(query,params);await addLog(\"INFO\",\"RECOMMENDATION\",`Generated recommendations for user ${userId||\"guest\"}`);res.json(result.rows.map(mapProductFromDB))}catch(err){console.error(\"Recommendation Error:\",err.message);res.status(500).json({error:\"Recommendation engine failed\"})}});app.get(\"/api/products/search\",async(req,res)=>{const{q}=req.query;if(!q)return res.status(400).json({error:\"Query required\"});if(!dbConnected)return res.json([]);try{const keywordResult=await pool.query(`SELECT * FROM products \n       WHERE product_name ILIKE $1 OR brand_name ILIKE $1 \n          OR (brand_name || ' ' || product_name) ILIKE $1\n          OR (product_name || ' ' || brand_name) ILIKE $1\n       ORDER BY \n         (CASE \n            WHEN product_name ILIKE $1 THEN 0 \n            WHEN brand_name ILIKE $1 THEN 1\n            ELSE 2 \n          END) ASC,\n         product_name ASC \n       LIMIT 10`,[`%${q}%`]);if(keywordResult.rows.length>0){await addLog(\"INFO\",\"SEARCH\",`Keyword search for: \"${q}\" (${keywordResult.rows.length} results)`);return res.json(keywordResult.rows.map(mapProductFromDB))}const embedding=await generateEmbedding(q);if(!embedding){const result2=await pool.query(`SELECT * FROM products WHERE product_name ILIKE $1 OR brand_name ILIKE $1 OR description ILIKE $1`,[`%${q}%`]);return res.json(result2.rows.map(mapProductFromDB))}const result=await pool.query(`SELECT *, (embedding <=> $1::vector) as distance \n       FROM products \n       WHERE (embedding <=> $1::vector) < 0.6\n       ORDER BY distance ASC \n       LIMIT 10`,[`[${embedding.join(\",\")}]`]);await addLog(\"INFO\",\"SEARCH\",`Semantic search for: \"${q}\"`);res.json(result.rows.map(mapProductFromDB))}catch(err){console.error(\"Search Error:\",err.message);res.status(500).json({error:\"Search failed\"})}});app.get(\"/api/admin/preferences\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});try{res.json(await getQuestionConfigs())}catch(err){res.status(500).json({error:err.message})}});app.post(\"/api/admin/preferences\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{attributes}=req.body;const client=await pool.connect();try{await client.query(\"BEGIN\");await client.query(\"DELETE FROM customer_preference_config\");for(const attr of attributes){await client.query(`INSERT INTO customer_preference_config (\n          key, label, values, description, category, mode, sort_order, required, helper_text, curiosity_prompt, weight, depends_on_key, depends_on_value\n        ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)`,[attr.key,attr.label,JSON.stringify(attr.values||[]),attr.description||\"\",attr.category||\"USER_DNA\",attr.mode||\"DEEP\",attr.sortOrder??0,attr.required??true,attr.helperText||\"\",attr.curiosityPrompt||\"\",attr.weight??1,attr.dependsOnKey||null,attr.dependsOnValue||null])}await client.query(\"COMMIT\");res.json({success:true})}catch(err){await client.query(\"ROLLBACK\");res.status(500).json({error:err.message})}finally{client.release()}});app.get(\"/api/customer/questions\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});try{res.json(await getQuestionConfigs())}catch(err){res.status(500).json({error:err.message})}});app.put(\"/api/users/:id\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{id}=req.params;const{name,email,preferences}=req.body;try{let embedding=null;if(preferences){const preferenceText=Object.entries(preferences).map(([key,value])=>`${key.replace(/_/g,\" \")}: ${Array.isArray(value)?value.join(\", \"):value}`).join(\". \");embedding=await generateEmbedding(preferenceText)}if(embedding){await pool.query(`UPDATE users SET name = $1, email = $2, preferences = $3, embedding = $4 WHERE id = $5`,[name,email,JSON.stringify(preferences),JSON.stringify(embedding),id])}else{await pool.query(`UPDATE users SET name = $1, email = $2 WHERE id = $3`,[name,email,id])}res.json({success:true})}catch(err){console.error(\"Update User Error:\",err.message);res.status(500).json({error:\"Failed to update user\"})}});app.delete(\"/api/users/:id\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{id}=req.params;try{await pool.query(\"DELETE FROM users WHERE id = $1\",[id]);res.json({success:true})}catch(err){console.error(\"Delete User Error:\",err.message);res.status(500).json({error:\"Failed to delete user\"})}});app.get(\"/api/auth/check-email\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{email}=req.query;if(!email)return res.status(400).json({error:\"Email is required\"});try{const result=await pool.query(\"SELECT id FROM users WHERE LOWER(email) = LOWER($1)\",[email]);res.json({exists:result.rows.length>0})}catch(err){console.error(\"Check Email Error:\",err.message);res.status(500).json({error:\"Failed to check email\"})}});app.post(\"/api/auth/register-customer\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{id,name,email,preferences={},personalBarcode}=req.body;const lowerEmail=email.toLowerCase();try{const questions=await getQuestionConfigs();const computedBarcode=personalBarcode?.segments?.length?personalBarcode:buildPersonalBarcode(questions,preferences);const textToEmbed=buildPreferenceText(questions,preferences);const embedding=textToEmbed?await generateEmbedding(`${textToEmbed}. Sensory Profile: ${computedBarcode.segments.map(segment=>`${segment.category}: ${segment.value}`).join(\", \")}`):null;await pool.query(`INSERT INTO users (id, name, email, role, preferences, personal_barcode, embedding, joined_at, status)\n       VALUES ($1, $2, $3, 'CUSTOMER', $4, $5, $6, $7, 'ACTIVE')`,[id,name,lowerEmail,JSON.stringify(preferences),JSON.stringify(computedBarcode||{}),embedding?JSON.stringify(embedding):null,new Date().toISOString()]);await addLog(\"INFO\",\"AUTH\",`New customer registered: ${lowerEmail}`);const userRes=await pool.query(\"SELECT * FROM users WHERE id = $1\",[id]);res.json(await formatUser(userRes.rows[0]))}catch(err){if(err.code===\"23505\")return res.status(400).json({error:\"customer with this email already there\"});console.error(\"Customer Register Error:\",err.message);res.status(500).json({error:err.message})}});app.get(\"/api/products/recommendations\",async(req,res)=>{const{userId}=req.query;if(!dbConnected)return res.json([]);try{if(!userId){const fallbackRes=await pool.query(`\n        SELECT * FROM products\n        WHERE status = 'PUBLISHED'\n        ORDER BY created_at DESC\n        LIMIT 12\n      `);return res.json(fallbackRes.rows.map(mapProductFromDB))}const userRes=await pool.query(\"SELECT preferences, embedding, personal_barcode FROM users WHERE id = $1\",[userId]);if(userRes.rows.length===0){const fallbackRes=await pool.query(`\n        SELECT * FROM products\n        WHERE status = 'PUBLISHED'\n        ORDER BY created_at DESC\n        LIMIT 12\n      `);return res.json(fallbackRes.rows.map(mapProductFromDB))}const user=userRes.rows[0];const preferences=user.preferences||{};const personalBarcode=typeof user.personal_barcode===\"string\"?(()=>{try{return JSON.parse(user.personal_barcode)}catch{return{}}})():user.personal_barcode||{};const buckets=await getRankedRecommendationsForProfile({userId:String(userId),preferences,personalBarcode,limit:24});await addLog(\"INFO\",\"RECOMMENDATION\",`Generated bucketed recommendations for user ${String(userId)}`);res.json(buckets)}catch(err){console.error(\"Recommendation Error:\",err.message);res.status(500).json({error:\"Failed to fetch recommendations\"})}});app.post(\"/api/products/recommendations/profile\",async(req,res)=>{if(!dbConnected)return res.json([]);const{userId=\"\",preferences={},personalBarcode={}}=req.body||{};try{const buckets=await getRankedRecommendationsForProfile({userId:String(userId||\"\"),preferences:preferences||{},personalBarcode:personalBarcode||{},limit:24});await addLog(\"INFO\",\"RECOMMENDATION\",`Generated profile-based bucketed recommendations for user ${String(userId||\"session\")}`);res.json(buckets)}catch(err){console.error(\"Profile Recommendation Error:\",err.message);res.status(500).json({error:\"Failed to fetch profile recommendations\"})}});app.get(\"/api/products/:id/social-proof\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{id}=req.params;try{const productRes=await pool.query(\"SELECT * FROM products WHERE id = $1\",[id]);if(productRes.rows.length===0){return res.status(404).json({error:\"Product not found\"})}const product=mapProductFromDB(productRes.rows[0]);const signals=await getProductBehaviorSignals(id);const dna=finalizeProductDNA(product.productDNA||{},buildProductDNA(product,buildProductProfileText(product)));const socialProof=buildProductSocialProof(product,dna,signals);res.json({socialProof,validation:dna.validation||{}})}catch(err){console.error(\"Product Social Proof Error:\",err.message);res.status(500).json({error:\"Failed to load product social proof\"})}});app.post(\"/api/recommendation-events\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{userId,productId,eventType,metadata}=req.body||{};if(!userId||!productId||!eventType){return res.status(400).json({error:\"userId, productId, and eventType are required\"})}try{console.log(`[LEARNING] Event received: ${eventType} for user ${userId} on product ${productId}`);await trackRecommendationEvent(String(userId),String(productId),String(eventType),metadata||{});res.json({success:true})}catch(err){console.error(\"Recommendation Event Error:\",err.message);res.status(500).json({error:\"Failed to track recommendation event\"})}});app.post(\"/api/tools/gift-genie\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{userId=\"\",recipientProfile={},occasion=\"\",budget=\"\",preferredStyle=\"\",relationshipTone=\"\",recipientDescription=\"\"}=req.body||{};try{console.log(`[TOOL][Gift Genie] Started for user ${userId||\"guest\"}`);const questions=await getQuestionConfigs();const userRow=userId?await pool.query(\"SELECT preferences, personal_barcode FROM users WHERE id = $1\",[userId]):{rows:[]};const basePreferences=userRow.rows[0]?.preferences||{};const baseBarcode=userRow.rows[0]?.personal_barcode||{};console.log(`[TOOL][Gift Genie] Loaded saved profile keys: ${Object.keys(basePreferences).length}`);const inferredRecipientProfile=await inferProfileFromText(recipientDescription,questions,\"gift recipient\");const toolPreferences={desired_impression:preferredStyle?[preferredStyle]:[],occasion:occasion?[occasion]:[],budget:budget?[budget]:[],emotional_effect:relationshipTone?[relationshipTone]:[]};const mergedPreferences={...basePreferences,...recipientProfile,...inferredRecipientProfile,...toolPreferences};const ranked=await getRankedRecommendationsForProfile({userId:String(userId||\"\"),preferences:mergedPreferences,personalBarcode:baseBarcode,limit:16});const allResults=Array.isArray(ranked.all)?ranked.all:[];console.log(`[TOOL][Gift Genie] Top hero pick: ${ranked.perfectPick?.productName||allResults[0]?.productName||\"none\"}`);const narrative=await buildToolNarrative(\"Gift Genie\",{occasion,budget,relationshipTone,recipientDescription,topProducts:allResults.slice(0,3).map(item=>({name:item.productName,brand:item.brandName,match:item.matchPercentage,why:item.explainability?.whyChosen||[]}))});res.json({hero:ranked.perfectPick||allResults[0]||null,alternatives:allResults.slice(1,6),narrative});console.log(\"[TOOL][Gift Genie] Completed successfully\")}catch(err){console.error(\"Gift Genie Error:\",err.message);res.status(500).json({error:\"Failed to build gift recommendations\"})}});app.post(\"/api/tools/couple-sync\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{userId=\"\",personA={},personB={},relationshipIntent=\"Balanced\"}=req.body||{};if(!userId)return res.status(400).json({error:\"userId is required\"});try{console.log(`[TOOL][Couple Sync] Started for user ${userId}`);const questions=await getQuestionConfigs();const userRow=await pool.query(\"SELECT preferences FROM users WHERE id = $1\",[userId]);if(userRow.rows.length===0){return res.status(404).json({error:\"User not found\"})}const savedPreferences=userRow.rows[0]?.preferences||{};console.log(`[TOOL][Couple Sync] Loaded saved profile keys: ${Object.keys(savedPreferences).length}`);const toAnswerArray=__name(value=>{if(Array.isArray(value))return value.map(item=>String(item||\"\").trim()).filter(Boolean);if(value===void 0||value===null||String(value).trim()===\"\")return[];return[String(value).trim()]},\"toAnswerArray\");const normalizeQuickProfile=__name((profile={})=>({smell_attraction:toAnswerArray(profile.smell_attraction),desired_impression:toAnswerArray(profile.desired_impression),presence_level:toAnswerArray(profile.presence_level),rejection_triggers:toAnswerArray(profile.rejection_triggers)}),\"normalizeQuickProfile\");const intentKey=normalizeText(relationshipIntent)||\"balanced\";const intentProfiles={impress:{occasion:[\"Special Event\"],time_of_use:[\"Night\"],versatility:[\"Occasion\"],trend_preference:[\"Trending\"],performance_expectation:[\"Strong projection\"]},comfort:{occasion:[\"Office / Daily\"],time_of_use:[\"All day\"],versatility:[\"Daily\"],trend_preference:[\"Classic\"],performance_expectation:[\"Balanced\"]},attraction:{occasion:[\"Date\"],time_of_use:[\"Night\"],versatility:[\"Signature\"],trend_preference:[\"Balanced\"],performance_expectation:[\"Strong projection\"]},balanced:{occasion:[\"Special Event\"],time_of_use:[\"All day\"],versatility:[\"Signature\"],trend_preference:[\"Balanced\"],performance_expectation:[\"Balanced\"]}};const personAQuick=mergePreferenceProfiles(normalizeQuickProfile(savedPreferences),normalizeQuickProfile(personA));const personBQuick=normalizeQuickProfile(personB);const intentPreferences=intentProfiles[intentKey]||intentProfiles.balanced;const personAProfile=mergePreferenceProfiles(savedPreferences,personAQuick,intentPreferences);const personBProfile=mergePreferenceProfiles(personBQuick,intentPreferences);const requiredQuickKeys=[\"smell_attraction\",\"desired_impression\",\"presence_level\",\"rejection_triggers\"];const missingQuickInput=requiredQuickKeys.some(key=>!getSelectedAnswer(personAQuick,key)||!getSelectedAnswer(personBQuick,key));if(missingQuickInput){return res.status(400).json({error:\"Both Person A and Person B must complete the quick DNA fields.\"})}const productsResult=await pool.query(`\n      SELECT *\n      FROM products\n      WHERE status = 'PUBLISHED'\n      ORDER BY created_at DESC\n      LIMIT 60\n    `);const intentScoreForProduct=__name(productDNA=>{if(intentKey===\"impress\"){return averageScores([productDNA.occasionFit?.specialEvent,productDNA.uniquenessScore,productDNA.complimentFactorScore,productDNA.traitScores?.elegant,productDNA.traitScores?.bold])}if(intentKey===\"comfort\"){return averageScores([productDNA.massAppealScore,productDNA.versatilityScore,100-(productDNA.riskIndex||0),productDNA.traitScores?.friendly,productDNA.traitScores?.relaxed])}if(intentKey===\"attraction\"){return averageScores([productDNA.occasionFit?.date,productDNA.complimentFactorScore,productDNA.traitScores?.romantic,productDNA.traitScores?.confident,productDNA.traitScores?.warm])}return averageScores([productDNA.versatilityScore,productDNA.massAppealScore,productDNA.uniquenessScore,productDNA.complimentFactorScore])},\"intentScoreForProduct\");const sharedFieldLabels={smell_attraction:\"smell attraction\",desired_impression:\"impression\",presence_level:\"presence\",rejection_triggers:\"avoidance\"};const scored=productsResult.rows.map(row=>{const product=mapProductFromDB(row);const productText=buildProductProfileText(product);const productDNA=buildProductDNA(product,productText);const personAUserDNA=scoreQuestionGroup(questions,\"USER_DNA\",personAProfile,product,productText,productDNA);const personBUserDNA=scoreQuestionGroup(questions,\"USER_DNA\",personBProfile,product,productText,productDNA);const pairNeedDNA=scoreQuestionGroup(questions,\"NEED_DNA\",intentPreferences,product,productText,productDNA);const sharedFieldScores=requiredQuickKeys.map(key=>{const question=questions.find(item=>item.key===key);const aAnswer=getSelectedAnswer(personAQuick,key);const bAnswer=getSelectedAnswer(personBQuick,key);if(!question||!aAnswer||!bAnswer)return null;const aScore=scoreQuestionAgainstProduct({...question,preferences:{[key]:[aAnswer]}},product,productText,productDNA);const bScore=scoreQuestionAgainstProduct({...question,preferences:{[key]:[bAnswer]}},product,productText,productDNA);return normalizeText(aAnswer)===normalizeText(bAnswer)?averageScores([aScore,bScore]):averageScores([aScore,bScore],55)}).filter(value=>Number.isFinite(Number(value)));const balanceScore=clampScore(100-Math.abs(personAUserDNA.score-personBUserDNA.score));const intentScore=intentScoreForProduct(productDNA);const sharedTasteScore=averageScores(sharedFieldScores,55);const harmonyScore=clampScore(personAUserDNA.score*.34+personBUserDNA.score*.34+pairNeedDNA.score*.14+balanceScore*.1+sharedTasteScore*.08);const safeScore=clampScore(averageScores([harmonyScore,balanceScore,100-(productDNA.riskIndex||0),productDNA.massAppealScore,productDNA.versatilityScore,intentKey===\"comfort\"?92:intentKey===\"balanced\"?84:70]));const perfectScore=clampScore(averageScores([harmonyScore,balanceScore,sharedTasteScore,intentScore,productDNA.complimentFactorScore]));const boldScore=clampScore(averageScores([harmonyScore,intentScore,productDNA.uniquenessScore,productDNA.riskIndex,productDNA.complimentFactorScore,intentKey===\"attraction\"||intentKey===\"impress\"?90:65]));const sharedMatches=requiredQuickKeys.map(key=>{const aAnswer=getSelectedAnswer(personAQuick,key);const bAnswer=getSelectedAnswer(personBQuick,key);if(!aAnswer||!bAnswer)return\"\";if(normalizeText(aAnswer)===normalizeText(bAnswer)){return`Both profiles align on ${sharedFieldLabels[key]}: ${aAnswer}`}return\"\"}).filter(Boolean);const contrastReason=intentKey===\"attraction\"?\"The attraction intent rewards a profile that creates chemistry instead of smelling identical on both people.\":intentKey===\"impress\"?\"The impress intent leans toward fragrances with stronger presence and memorable social impact.\":intentKey===\"comfort\"?\"The comfort intent favors lower-risk fragrances both people can wear with ease.\":\"The balanced intent favors fragrances that feel shared without becoming flat.\";const explainability={userDNA:uniqueInsightList([...personAUserDNA.reasons.slice(0,2).map(reason=>`Person A: ${reason}`),...personBUserDNA.reasons.slice(0,2).map(reason=>`Person B: ${reason}`)]),needDNA:uniqueInsightList([`Relationship intent: ${relationshipIntent}`,...pairNeedDNA.reasons]),productIntelligence:uniqueInsightList([`${Math.round(productDNA.massAppealScore||0)} mass appeal`,`${Math.round(productDNA.uniquenessScore||0)} uniqueness`,`${Math.round(productDNA.complimentFactorScore||0)} compliment factor`]),summary:`${product.productName} balances both quick-DNA profiles while staying faithful to a ${relationshipIntent.toLowerCase()} intent.`,whyChosen:uniqueInsightList([...sharedMatches.slice(0,2),balanceScore>=78?\"It stays balanced enough to satisfy both personalities without leaning too hard toward one side.\":\"\",contrastReason,productDNA.complimentFactorScore>=72?\"Its compliment profile gives the pair stronger social confidence.\":\"\"]),whyBetterThanOthers:uniqueInsightList([safeScore>=82?\"It carries lower shared risk than sharper or more polarizing alternatives.\":\"\",perfectScore>=82?\"It balances both quick DNA profiles more evenly than nearby options.\":\"\",boldScore>=82?\"It creates more memorable contrast than safer shared options.\":\"\"]),whyTrustThisRecommendation:uniqueInsightList([`Person A match ${Math.round(personAUserDNA.score)} and Person B match ${Math.round(personBUserDNA.score)} were both considered.`,`Relationship intent contributes ${Math.round(pairNeedDNA.score)} to the shared decision.`,productDNA.reviewHighlights?.[0]?`Product intelligence also supports it: ${productDNA.reviewHighlights[0]}`:\"\"])};return{...product,recommendationScore:Number(harmonyScore.toFixed(1)),matchPercentage:Number(harmonyScore.toFixed(1)),safeScore:Number(safeScore.toFixed(1)),boldnessScore:Number(boldScore.toFixed(1)),explainability,_pairBalanceScore:balanceScore,_perfectScore:perfectScore,_intentScore:intentScore}}).sort((a,b)=>{const left=averageScores([b.recommendationScore,b._perfectScore,b._pairBalanceScore],50);const right=averageScores([a.recommendationScore,a._perfectScore,a._pairBalanceScore],50);return left-right});const attachCoupleFrame=__name((product,frame)=>{if(!product)return null;const frameCopy={Safe:{whyChosen:[\"Both of you are more likely to enjoy this without friction.\",...product.explainability?.whyChosen||[]],whyBetterThanOthers:[\"It stays safer and less polarizing than the sharper alternatives in the set.\",...product.explainability?.whyBetterThanOthers||[]]},Perfect:{whyChosen:[\"This is the best overall balance of both personalities and the relationship intent.\",...product.explainability?.whyChosen||[]],whyBetterThanOthers:[\"It balances shared satisfaction and chemistry better than the surrounding options.\",...product.explainability?.whyBetterThanOthers||[]]},Bold:{whyChosen:[\"This creates the strongest attraction contrast while still staying inside your shared lane.\",...product.explainability?.whyChosen||[]],whyBetterThanOthers:[\"It pushes more personality and chemistry than the safer shared choices.\",...product.explainability?.whyBetterThanOthers||[]]}}[frame];return{...product,explainability:{...product.explainability||{},confidenceLabel:frame,whyChosen:uniqueInsightList(frameCopy.whyChosen),whyBetterThanOthers:uniqueInsightList(frameCopy.whyBetterThanOthers)}}},\"attachCoupleFrame\");const perfectPick=attachCoupleFrame(scored[0]||null,\"Perfect\");const safePick=attachCoupleFrame([...scored].filter(product=>product.id!==perfectPick?.id).sort((a,b)=>(b.safeScore||0)-(a.safeScore||0))[0]||null,\"Safe\");const boldPick=attachCoupleFrame([...scored].filter(product=>product.id!==perfectPick?.id&&product.id!==safePick?.id).sort((a,b)=>(b.boldnessScore||0)-(a.boldnessScore||0))[0]||null,\"Bold\");const usedIds=new Set([safePick?.id,perfectPick?.id,boldPick?.id].filter(Boolean));const alternatives=scored.filter(product=>!usedIds.has(product.id)).slice(0,6);console.log(`[TOOL][Couple Sync] Perfect pick: ${perfectPick?.productName||\"none\"}`);const narrative=await buildToolNarrative(\"Couple Sync\",{relationshipIntent,personA:personAQuick,personB:personBQuick,safePick:safePick?{name:safePick.productName,brand:safePick.brandName,match:safePick.matchPercentage}:null,perfectPick:perfectPick?{name:perfectPick.productName,brand:perfectPick.brandName,match:perfectPick.matchPercentage}:null,boldPick:boldPick?{name:boldPick.productName,brand:boldPick.brandName,match:boldPick.matchPercentage}:null});res.json({safePick,perfectPick,boldPick,alternatives,relationshipIntent,personA:personAQuick,personB:personBQuick,narrative});console.log(\"[TOOL][Couple Sync] Completed successfully\")}catch(err){console.error(\"Couple Sync Error:\",err.message);res.status(500).json({error:\"Failed to build couple sync recommendations\"})}});app.post(\"/api/tools/scent-compare\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{leftProductId,rightProductId,userId}=req.body||{};if(!leftProductId||!rightProductId){return res.status(400).json({error:\"leftProductId and rightProductId are required\"})}try{console.log(`[TOOL][Scent Compare] Started for user ${userId||\"guest\"} comparing ${leftProductId} vs ${rightProductId}`);const productsResult=await pool.query(`\n      SELECT *\n      FROM products\n      WHERE id = ANY($1)\n    `,[[leftProductId,rightProductId]]);const products=productsResult.rows.map(mapProductFromDB);const userResult=userId?await pool.query(\"SELECT preferences FROM users WHERE id = $1\",[userId]):{rows:[]};const preferences=userResult.rows[0]?.preferences||{};const questions=await getQuestionConfigs();const compared=products.map(product=>{const productText=buildProductProfileText(product);const productDNA=buildProductDNA(product,productText);const userDNA=scoreQuestionGroup(questions,\"USER_DNA\",preferences,product,productText,productDNA);const needDNA=scoreQuestionGroup(questions,\"NEED_DNA\",preferences,product,productText,productDNA);const productIntelligence=scoreProductIntelligence(preferences,product,productText,productDNA);const score=clampScore(userDNA.score*.45+needDNA.score*.3+productIntelligence.score*.25);return{...product,matchPercentage:Number(score.toFixed(1)),explainability:buildExplainability(userDNA.reasons,needDNA.reasons,productIntelligence.reasons,product.productName,productDNA,detectProfileState(preferences))}});const winner=[...compared].sort((a,b)=>(b.matchPercentage||0)-(a.matchPercentage||0))[0]||null;console.log(`[TOOL][Scent Compare] Winner: ${winner?.productName||\"none\"}`);const narrative=await buildToolNarrative(\"Scent Compare\",{userId,compared:compared.map(item=>({name:item.productName,brand:item.brandName,match:item.matchPercentage,why:item.explainability?.whyChosen||[]})),winner:winner?{name:winner.productName,brand:winner.brandName,match:winner.matchPercentage}:null});res.json({winner,products:compared,narrative});console.log(\"[TOOL][Scent Compare] Completed successfully\")}catch(err){console.error(\"Scent Compare Error:\",err.message);res.status(500).json({error:\"Failed to compare scents\"})}});app.post(\"/api/tools/scent-wardrobe\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{userId=\"\",wardrobeGoal=\"Balanced\",wardrobeMode=\"Daily to occasion\"}=req.body||{};if(!userId)return res.status(400).json({error:\"userId is required\"});try{console.log(`[TOOL][Scent Wardrobe] Started for user ${userId}`);const userResult=await pool.query(\"SELECT preferences, personal_barcode FROM users WHERE id = $1\",[userId]);if(userResult.rows.length===0){return res.status(404).json({error:\"User not found\"})}const preferences=userResult.rows[0].preferences||{};const personalBarcode=userResult.rows[0].personal_barcode||{};const ranked=await getRankedRecommendationsForProfile({userId:String(userId),preferences,personalBarcode,limit:28});const source=flattenRecommendationBuckets(ranked);const usedIds=new Set;const wardrobeLenses=[{key:\"daily\",title:\"Daily Signature\",context:\"Your clean everyday reach when you want confidence without effort.\",score:__name(product=>averageScores([product.recommendationScore,product.safeScore,product.productDNA?.versatilityScore,product.productDNA?.timeFit?.day,product.productDNA?.occasionFit?.everything]),\"score\")},{key:\"office\",title:\"Office Presence\",context:\"Polished, composed, and comfortable for professional settings.\",score:__name(product=>averageScores([product.recommendationScore,product.safeScore,product.productDNA?.occasionFit?.office,product.productDNA?.traitScores?.professional,100-(product.productDNA?.riskIndex||0)]),\"score\")},{key:\"date\",title:\"Date Night\",context:\"When you want warmth, attraction, and memorable presence.\",score:__name(product=>averageScores([product.recommendationScore,product.boldnessScore,product.productDNA?.occasionFit?.date,product.productDNA?.complimentFactorScore,product.productDNA?.traitScores?.romantic]),\"score\")},{key:\"travel\",title:\"Travel Companion\",context:\"Easy to wear across changing climates, schedules, and moods.\",score:__name(product=>averageScores([product.recommendationScore,product.productDNA?.occasionFit?.travel,product.productDNA?.climateAdaptability,product.productDNA?.versatilityScore,product.productDNA?.valueScore]),\"score\")},{key:\"statement\",title:\"Statement Signature\",context:\"The wardrobe slot for nights when you want your scent to say more.\",score:__name(product=>averageScores([product.recommendationScore,product.boldnessScore,product.productDNA?.occasionFit?.specialEvent,product.productDNA?.uniquenessScore,product.productDNA?.traitScores?.bold]),\"score\")}];const wardrobe=wardrobeLenses.map(lens=>{const sorted=[...source].sort((a,b)=>lens.score(b)-lens.score(a));const selected=pickFirstUnusedRecommendation(sorted,usedIds);return{key:lens.key,title:lens.title,context:lens.context,product:selected,why:(selected?.explainability?.whyNow?.length?selected.explainability.whyNow:selected?.explainability?.whyChosen||[]).slice(0,3)}});const alternatives=source.filter(product=>!usedIds.has(product.id)).slice(0,6);const narrative=await buildToolNarrative(\"Scent Wardrobe\",{wardrobeGoal,wardrobeMode,wardrobe:wardrobe.map(slot=>({slot:slot.title,fragrance:slot.product?`${slot.product.brandName} ${slot.product.productName}`:\"none\",match:slot.product?.matchPercentage||null,why:slot.why}))});res.json({wardrobe,alternatives,narrative});console.log(`[TOOL][Scent Wardrobe] Completed successfully with ${wardrobe.filter(slot=>slot.product).length} filled slots`)}catch(err){console.error(\"Scent Wardrobe Error:\",err.message);res.status(500).json({error:\"Failed to build scent wardrobe\"})}});app.post(\"/api/tools/event-stylist\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{userId=\"\",eventType=\"Special Event\",venue=\"Indoor\",dressCode=\"Polished\",climate=\"Balanced\",impression=\"Elegant / Classy\",eventDescription=\"\"}=req.body||{};if(!userId)return res.status(400).json({error:\"userId is required\"});try{console.log(`[TOOL][Event Stylist] Started for user ${userId}`);const questions=await getQuestionConfigs();const userResult=await pool.query(\"SELECT preferences, personal_barcode FROM users WHERE id = $1\",[userId]);if(userResult.rows.length===0){return res.status(404).json({error:\"User not found\"})}const savedPreferences=userResult.rows[0].preferences||{};const personalBarcode=userResult.rows[0].personal_barcode||{};const inferredEventProfile=await inferProfileFromText(eventDescription,questions,\"event styling brief\");const mergedPreferences=mergePreferenceProfiles(savedPreferences,inferredEventProfile,{occasion:[eventType],desired_impression:[impression],environment:[venue],temperature_preference:[climate],signature_preference:[dressCode]});const ranked=await getRankedRecommendationsForProfile({userId:String(userId),preferences:mergedPreferences,personalBarcode,limit:18});const allResults=flattenRecommendationBuckets(ranked);const narrative=await buildToolNarrative(\"Event Stylist\",{eventType,venue,dressCode,climate,impression,eventDescription,topProducts:allResults.slice(0,4).map(item=>({name:item.productName,brand:item.brandName,match:item.matchPercentage,why:item.explainability?.whyNow||item.explainability?.whyChosen||[]}))});res.json({hero:ranked.perfectPick||allResults[0]||null,sceneSetters:allResults.slice(1,6),eventProfile:{eventType,venue,dressCode,climate,impression},narrative});console.log(`[TOOL][Event Stylist] Hero pick: ${ranked.perfectPick?.productName||allResults[0]?.productName||\"none\"}`)}catch(err){console.error(\"Event Stylist Error:\",err.message);res.status(500).json({error:\"Failed to build event styling recommendations\"})}});app.post(\"/api/tools/scent-composer\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{userId=\"\",dreamDescription=\"\",mood=\"Confident\",texture=\"Polished\",intensity=\"Moderate\",occasion=\"Everything\"}=req.body||{};if(!userId)return res.status(400).json({error:\"userId is required\"});try{console.log(`[TOOL][Scent Composer] Started for user ${userId}`);const questions=await getQuestionConfigs();const userResult=await pool.query(\"SELECT preferences, personal_barcode FROM users WHERE id = $1\",[userId]);if(userResult.rows.length===0){return res.status(404).json({error:\"User not found\"})}const savedPreferences=userResult.rows[0].preferences||{};const personalBarcode=userResult.rows[0].personal_barcode||{};const inferredProfile=await inferProfileFromText([dreamDescription,mood,texture,intensity,occasion].filter(Boolean).join(\". \"),questions,\"composed scent brief\");const mergedPreferences=mergePreferenceProfiles(savedPreferences,inferredProfile,{emotional_effect:[mood],desired_impression:[texture],presence_level:[intensity],occasion:[occasion]});const ranked=await getRankedRecommendationsForProfile({userId:String(userId),preferences:mergedPreferences,personalBarcode,limit:18});const hero=ranked.perfectPick||ranked.safePick||ranked.boldPick||ranked.all?.[0]||null;const composition=hero?{headline:`${hero.productDNA?.dominantFamily||\"balanced\"} signature with ${hero.productDNA?.genderTone||\"unisex\"} polish`,accords:hero.productDNA?.noteSignature||[],moodWords:hero.productDNA?.moodTags||[],signatureDirection:hero.productDNA?.personaTags||[]}:{headline:\"Composed from your scent brief\",accords:[],moodWords:[],signatureDirection:[]};const narrative=await buildToolNarrative(\"Scent Composer\",{dreamDescription,mood,texture,intensity,occasion,composition,hero:hero?{name:hero.productName,brand:hero.brandName,match:hero.matchPercentage}:null});res.json({hero,alternatives:(ranked.all||[]).filter(product=>product.id!==hero?.id).slice(0,6),composition,narrative});console.log(`[TOOL][Scent Composer] Hero composition: ${hero?.productName||\"none\"}`)}catch(err){console.error(\"Scent Composer Error:\",err.message);res.status(500).json({error:\"Failed to compose scent recommendations\"})}});app.get(\"/api/tools/echo-sphere\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{userId}=req.query;if(!userId)return res.status(400).json({error:\"userId is required\"});try{console.log(`[TOOL][Echo Sphere] Started for user ${userId}`);const userResult=await pool.query(\"SELECT preferences, personal_barcode FROM users WHERE id = $1\",[userId]);if(userResult.rows.length===0){return res.status(404).json({error:\"User not found\"})}const preferences=userResult.rows[0].preferences||{};const personalBarcode=userResult.rows[0].personal_barcode||{};const behaviorProfile=await getUserBehaviorProfile(String(userId));const echoProfile=summarizeEchoProfile(behaviorProfile);const ranked=await getRankedRecommendationsForProfile({userId:String(userId),preferences,personalBarcode,limit:24});const allResults=flattenRecommendationBuckets(ranked);const innerCircle=allResults.slice(0,3);const expandingOrbit=dedupeRecommendations([...allResults].sort((a,b)=>averageScores([b.productDNA?.uniquenessScore,b.productDNA?.popularityTrendScore,b.recommendationScore])-averageScores([a.productDNA?.uniquenessScore,a.productDNA?.popularityTrendScore,a.recommendationScore]))).filter(product=>!innerCircle.find(core=>core.id===product.id)).slice(0,4);const contrastEcho=dedupeRecommendations([ranked.boldPick,...allResults]).find(product=>!innerCircle.find(core=>core.id===product.id)&&!expandingOrbit.find(item=>item.id===product.id))||null;const narrative=await buildToolNarrative(\"Echo Sphere\",{echoProfile,innerCircle:innerCircle.map(item=>({name:item.productName,brand:item.brandName,match:item.matchPercentage})),expandingOrbit:expandingOrbit.map(item=>({name:item.productName,brand:item.brandName,match:item.matchPercentage})),contrastEcho:contrastEcho?{name:contrastEcho.productName,brand:contrastEcho.brandName,match:contrastEcho.matchPercentage}:null});res.json({innerCircle,expandingOrbit,contrastEcho,echoProfile,narrative});console.log(`[TOOL][Echo Sphere] Completed with ${innerCircle.length} inner-circle results`)}catch(err){console.error(\"Echo Sphere Error:\",err.message);res.status(500).json({error:\"Failed to load echo sphere\"})}});app.get(\"/api/tools/evolution-engine\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{userId}=req.query;if(!userId)return res.status(400).json({error:\"userId is required\"});try{console.log(`[TOOL][Evolution Engine] Started for user ${userId}`);const userResult=await pool.query(\"SELECT preferences, personal_barcode FROM users WHERE id = $1\",[userId]);if(userResult.rows.length===0){return res.status(404).json({error:\"User not found\"})}const user=userResult.rows[0];const preferences=user.preferences||{};const personalBarcode=user.personal_barcode||{};const behaviorProfile=await getUserBehaviorProfile(String(userId));const ranked=await getRankedRecommendationsForProfile({userId:String(userId),preferences,personalBarcode,limit:12});const topBrands=Object.entries(behaviorProfile.brandBoosts||{}).sort((a,b)=>Number(b[1])-Number(a[1])).slice(0,4).map(([brand,score])=>({brand,score:Number(score)}));const topFamilies=Object.entries(behaviorProfile.familyBoosts||{}).sort((a,b)=>Number(b[1])-Number(a[1])).slice(0,4).map(([family,score])=>({family,score:Number(score)}));const topTraits=Object.entries(behaviorProfile.traitBoosts||{}).sort((a,b)=>Number(b[1])-Number(a[1])).slice(0,4).map(([trait,score])=>({trait,score:Number(score)}));const topOccasions=Object.entries(behaviorProfile.occasionBoosts||{}).sort((a,b)=>Number(b[1])-Number(a[1])).slice(0,4).map(([occasion,score])=>({occasion,score:Number(score)}));const recentEvents=await pool.query(`\n      SELECT event_type, product_id, metadata, created_at\n      FROM recommendation_events\n      WHERE user_id = $1\n      ORDER BY created_at DESC\n      LIMIT 12\n    `,[userId]);const narrative=await buildToolNarrative(\"Evolution Engine\",{topBrands,topFamilies,topTraits,topOccasions,signalCounts:behaviorProfile.signalCounts||{},profileMomentum:behaviorProfile.profileMomentum,strongestPositiveSignal:behaviorProfile.strongestPositiveSignal,strongestCautionSignal:behaviorProfile.strongestCautionSignal,learnedTasteSummary:behaviorProfile.learnedTasteSummary,recentEvents:recentEvents.rows,perfectPick:ranked.perfectPick?{name:ranked.perfectPick.productName,brand:ranked.perfectPick.brandName,match:ranked.perfectPick.matchPercentage}:null});res.json({topBrands,topFamilies,topTraits,topOccasions,signalCounts:behaviorProfile.signalCounts||{},evolutionSummary:{profileMomentum:behaviorProfile.profileMomentum,strongestPositiveSignal:behaviorProfile.strongestPositiveSignal,strongestCautionSignal:behaviorProfile.strongestCautionSignal,learnedTasteSummary:behaviorProfile.learnedTasteSummary||[]},recentEvents:recentEvents.rows,refinedRecommendations:ranked,narrative});console.log(`[TOOL][Evolution Engine] Completed successfully with ${recentEvents.rows.length} recent events`)}catch(err){console.error(\"Evolution Engine Error:\",err.message);res.status(500).json({error:\"Failed to load evolution engine\"})}});app.get(\"/api/orders\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{customerId,vendorId}=req.query;try{let query=\"SELECT * FROM orders\";const params=[];if(customerId){const userRes=await pool.query(\"SELECT email FROM users WHERE id = $1\",[customerId]);if(userRes.rows.length>0){query+=\" WHERE customer_email = $1\";params.push(userRes.rows[0].email)}else{return res.json([])}}else if(vendorId){query+=\" WHERE vendor_id = $1\";params.push(vendorId)}query+=\" ORDER BY created_at DESC\";const result=await pool.query(query,params);res.json(result.rows)}catch(err){console.error(\"Get Orders Error:\",err.message);res.status(500).json({error:\"Failed to fetch orders\"})}});app.post(\"/api/orders\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{customerId,items,total,shippingAddress}=req.body;const orderId=`ord-${Date.now()}`;const orderNumber=`ORD-${Math.floor(1e5+Math.random()*9e5)}`;try{const userRes=await pool.query(\"SELECT name, email FROM users WHERE id = $1\",[customerId]);const customer=userRes.rows[0];await pool.query(`INSERT INTO orders (id, order_number, vendor_id, customer_name, customer_email, total, status, shipping_address, items, created_at)\n       VALUES ($1, $2, $3, $4, $5, $6, 'PENDING', $7, $8, $9)`,[orderId,orderNumber,\"vendor-1\",customer?.name||\"Guest\",customer?.email||\"\",total,shippingAddress,JSON.stringify(items),new Date().toISOString()]);if(customerId&&Array.isArray(items)){for(const item of items){if(item?.productId){await trackRecommendationEvent(String(customerId),String(item.productId),\"purchase\",{orderId,orderNumber,quantity:item.quantity||1,price:item.price||0})}}}for(const item of items){console.log(`[Stock Update] Sold ${item.quantity} of ${item.productName}`)}await addLog(\"INFO\",\"ORDER\",`New order ${orderNumber} from ${customer?.email}`);res.json({success:true,orderId,orderNumber})}catch(err){console.error(\"Create Order Error:\",err.message);res.status(500).json({error:err.message})}});app.post(\"/api/auth/login\",async(req,res)=>{const{email}=req.body;if(!dbConnected){if(email===\"admin@americanfragrances.com\"){return res.json({id:\"admin-1\",name:\"Internal Admin\",email:\"admin@americanfragrances.com\",role:\"ADMIN\",storeName:\"American Fragrances HQ\",status:\"ACTIVE\"})}return res.status(404).json({error:\"Database offline\"})}try{const result=await pool.query(\"SELECT * FROM users WHERE lower(email) = lower($1)\",[email]);const user=result.rows[0];if(!user)return res.status(404).json({error:\"User not found\"});await addLog(\"INFO\",\"AUTH\",`User logged in: ${email}`);res.json(await formatUser(user))}catch(err){console.error(\"Login Error:\",err.message);res.status(500).json({error:\"Database error\"})}});app.patch(\"/api/users/questionnaire\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{userId,answers={},mode}=req.body;try{const userRes=await pool.query(\"SELECT * FROM users WHERE id = $1\",[userId]);if(userRes.rows.length===0)return res.status(404).json({error:\"User not found\"});const questions=await getQuestionConfigs();const currentPreferences=userRes.rows[0].preferences||{};const mergedPreferences={...currentPreferences,...answers};const personalBarcode=buildPersonalBarcode(questions,mergedPreferences);const preferenceText=buildPreferenceText(questions,mergedPreferences);const barcodeText=personalBarcode.segments.map(segment=>`${segment.category}: ${segment.value}`).join(\", \");const embedding=preferenceText?await generateEmbedding(`${preferenceText}. Sensory Profile: ${barcodeText}`):null;const result=await pool.query(`UPDATE users\n       SET preferences = $1,\n           personal_barcode = $2,\n           embedding = COALESCE($3, embedding)\n       WHERE id = $4\n       RETURNING *`,[JSON.stringify(mergedPreferences),JSON.stringify(personalBarcode),embedding?JSON.stringify(embedding):null,userId]);await addLog(\"INFO\",\"QUESTIONNAIRE\",`Updated ${mode||\"customer\"} questionnaire answers for ${userId}`);res.json(await formatUser(result.rows[0]))}catch(err){console.error(\"Questionnaire Update Error:\",err.message);res.status(500).json({error:\"Failed to save questionnaire\"})}});app.patch(\"/api/users/profile\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{userId,name,phone,address,preferences,personalBarcode}=req.body;try{const questions=await getQuestionConfigs();let embeddingVector=null;let nextPreferences=preferences;let nextBarcode=personalBarcode;if(preferences&&Object.keys(preferences).length>0){nextBarcode=buildPersonalBarcode(questions,preferences)}if(nextPreferences&&Object.keys(nextPreferences).length>0||nextBarcode&&nextBarcode.segments){const profileText=buildPreferenceText(questions,nextPreferences||{})||\"Customer fragrance profile\";const barcodeText=nextBarcode?.segments?.map(s=>`${s.category}: ${s.value}`).join(\", \");const vector=await generateEmbedding(`${profileText}. Barcode Signature: ${barcodeText||\"\"}`);if(vector){embeddingVector=`[${vector.join(\",\")}]`}}const result=await pool.query(`UPDATE users \n       SET name = COALESCE($1, name), \n           phone = COALESCE($2, phone), \n           address = COALESCE($3, address),\n           preferences = COALESCE($4, preferences),\n           personal_barcode = COALESCE($5, personal_barcode),\n           embedding = COALESCE($6, embedding)\n       WHERE id = $7\n       RETURNING *`,[name,phone,address,nextPreferences?JSON.stringify(nextPreferences):null,nextBarcode?JSON.stringify(nextBarcode):null,embeddingVector,userId]);if(result.rows.length===0)return res.status(404).json({error:\"User not found\"});res.json(await formatUser(result.rows[0]))}catch(err){console.error(\"Profile Update Error:\",err.message);res.status(500).json({error:\"Failed to update profile\"})}});app.post(\"/api/auth/register\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const u=req.body;const lowerEmail=u.email.toLowerCase();try{await pool.query(`INSERT INTO users (id, name, email, role, store_name, avatar_url, status, joined_at)\n       VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`,[u.id,u.name,lowerEmail,u.role,u.storeName,u.avatarUrl,u.status,u.joinedAt]);await addLog(\"INFO\",\"AUTH\",`New user registered: ${lowerEmail}`);res.json({...u,email:lowerEmail})}catch(err){if(err.code===\"23505\")return res.status(400).json({error:\"customer with this email already there\"});console.error(\"Register Error:\",err.message);res.status(500).json({error:err.message})}});app.get(\"/api/users\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});try{const result=await pool.query(\"SELECT * FROM users\");const users=result.rows.map(user=>({id:user.id,name:user.name,email:user.email,role:user.role,storeName:user.store_name,avatarUrl:user.avatar_url,status:user.status,joinedAt:user.joined_at,phone:user.phone,address:user.address}));res.json(users)}catch(err){console.error(\"Get Users Error:\",err.message);res.status(500).json({error:err.message})}});const mapProductFromDB=__name(p=>{const parseJSON=__name((val,defaultVal)=>{if(typeof val===\"string\"){try{return JSON.parse(val)}catch(e){console.error(\"Failed to parse JSON string:\",e);return defaultVal}}return val||defaultVal},\"parseJSON\");const aiData=parseJSON(p.ai_data,{});const storedBarcode=parseJSON(p.barcode,null);const storedProductDNA=parseJSON(p.product_dna,{});const derivedBarcode=!storedBarcode?.segments?.length&&aiData&&Object.keys(aiData).length>0?buildProductBarcodeFromAIData(aiData):storedBarcode;return{id:p.id,vendorId:p.vendor_id,productName:p.product_name,brandName:p.brand_name,description:p.description,category:p.category,concentration:p.concentration,status:p.status,images:parseJSON(p.images,[]),variants:parseJSON(p.variants,[]),fragranceNotes:parseJSON(p.fragrance_notes,{}),aiBatchStatus:p.ai_batch_status,aiData,productDNA:storedProductDNA,barcode:derivedBarcode,distance:p.distance,createdAt:p.created_at,updatedAt:p.updated_at}},\"mapProductFromDB\");app.get(\"/api/products\",async(req,res)=>{const{userId}=req.query;if(!dbConnected)return res.status(503).json({error:\"Database offline\"});try{if(userId&&userId!==\"guest\"){const userRes=await pool.query(\"SELECT embedding FROM users WHERE id = $1\",[userId]);if(userRes.rows.length>0&&userRes.rows[0].embedding){let userEmbedding=userRes.rows[0].embedding;if(typeof userEmbedding!==\"string\"){userEmbedding=JSON.stringify(userEmbedding)}const result2=await pool.query(`SELECT *, (embedding <=> $1::vector) as distance \n           FROM products \n           ORDER BY distance ASC, rating DESC`,[userEmbedding]);return res.json(result2.rows.map(mapProductFromDB))}}const result=await pool.query(\"SELECT * FROM products ORDER BY updated_at DESC\");res.json(result.rows.map(mapProductFromDB))}catch(err){console.error(\"Get Products Error:\",err.message);res.status(500).json({error:\"Failed to fetch products\"})}});app.post(\"/api/products\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const p=req.body;const normalizedBarcode=p.barcode?.segments?.length||!p.aiData||Object.keys(p.aiData).length===0?p.barcode:buildProductBarcodeFromAIData(p.aiData);const workingProduct={...p,barcode:normalizedBarcode};const heuristicDNA=buildProductDNA({...workingProduct,productDNA:{}},buildProductProfileText(workingProduct));const enrichedProductDNA=await enrichProductDNAWithBedrock(workingProduct,heuristicDNA);const normalizedProductDNA=await calibrateProductDNA(workingProduct,enrichedProductDNA);if(p.aiData){console.log(`\\u{1F4BE} Saving product \"${p.productName}\" with AI Data keys:`,Object.keys(p.aiData))}else{console.log(`\\u{1F4BE} Saving product \"${p.productName}\" (No AI Data yet)`)}let embeddingVector=null;try{let textToEmbed=\"\";if(p.aiData&&Object.keys(p.aiData).length>0){textToEmbed=`AI Sensory Profile: `;Object.keys(p.aiData).forEach(key=>{if(key!==\"perfume_name\"&&typeof p.aiData[key]===\"object\"){textToEmbed+=`${key}: ${getTopTrait(p.aiData[key])}. `}});if(normalizedBarcode&&normalizedBarcode.segments){const barcodeText=normalizedBarcode.segments.map(s=>`${s.category}: ${s.value}`).join(\", \");textToEmbed+=`Barcode Signature: ${barcodeText}. `}}else{textToEmbed=`${p.productName} ${p.brandName} ${p.description} ${p.category}`;if(normalizedBarcode&&normalizedBarcode.segments){const barcodeText=normalizedBarcode.segments.map(s=>`${s.category}: ${s.value}`).join(\", \");textToEmbed+=`. Sensory Signature: ${barcodeText}`}}const vector=await generateEmbedding(textToEmbed);if(vector){embeddingVector=`[${vector.join(\",\")}]`}}catch(e){console.warn(\"Embedding generation failed on save:\",e.message)}try{const query=`\n      INSERT INTO products (\n        id, vendor_id, product_name, brand_name, description, category, concentration, status,\n        images, variants, fragrance_notes, ai_batch_status, ai_data, product_dna, barcode, created_at, updated_at, embedding\n      ) VALUES (\n        $1, $2, $3, $4, $5, $6, $7, $8,\n        $9::jsonb, $10::jsonb, $11::jsonb, $12, $13::jsonb, $14::jsonb, $15::jsonb, $16, $17, $18::vector\n      )\n      ON CONFLICT (id) DO UPDATE SET\n        product_name = EXCLUDED.product_name,\n        brand_name = EXCLUDED.brand_name,\n        description = EXCLUDED.description,\n        category = EXCLUDED.category,\n        concentration = EXCLUDED.concentration,\n        status = EXCLUDED.status,\n        images = EXCLUDED.images,\n        variants = EXCLUDED.variants,\n        fragrance_notes = EXCLUDED.fragrance_notes,\n        ai_batch_status = EXCLUDED.ai_batch_status,\n        ai_data = EXCLUDED.ai_data,\n        product_dna = EXCLUDED.product_dna,\n        barcode = EXCLUDED.barcode,\n        updated_at = EXCLUDED.updated_at,\n        embedding = EXCLUDED.embedding\n    `;await pool.query(query,[p.id,p.vendorId,p.productName,p.brandName,p.description,p.category,p.concentration,p.status,JSON.stringify(p.images||[]),JSON.stringify(p.variants||[]),JSON.stringify(p.fragranceNotes||{}),p.aiBatchStatus||\"PENDING\",JSON.stringify(p.aiData||{}),JSON.stringify(normalizedProductDNA||{}),JSON.stringify(normalizedBarcode||{}),p.createdAt||new Date().toISOString(),p.updatedAt||new Date().toISOString(),embeddingVector]);await addLog(\"INFO\",\"PRODUCT_SERVICE\",`Product saved with embedding: ${p.productName}`);res.json(p)}catch(err){console.error(\"Save Product Error:\",err.message);res.status(500).json({error:\"Failed to save product\"})}});app.delete(\"/api/products/:id\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});const{id}=req.params;try{await pool.query(\"DELETE FROM products WHERE id = $1\",[id]);await addLog(\"WARN\",\"PRODUCT_SERVICE\",`Product deleted: ${id}`);res.json({success:true})}catch(err){console.error(\"Delete Product Error:\",err.message);res.status(500).json({error:\"Failed to delete\"})}});app.get(\"/api/orders\",async(req,res)=>{if(!dbConnected)return res.status(503).json({error:\"Database offline\"});try{const result=await pool.query(\"SELECT * FROM orders ORDER BY created_at DESC\");const orders=result.rows.map(o=>({id:o.id,orderNumber:o.order_number,vendorId:o.vendor_id,customerName:o.customer_name,customerEmail:o.customer_email,total:parseFloat(o.total),status:o.status,shippingAddress:o.shipping_address,items:o.items,createdAt:o.created_at}));res.json(orders)}catch(err){console.error(\"Get Orders Error:\",err.message);res.status(500).json({error:\"Failed to fetch orders\"})}});if(process.env.NODE_ENV!==\"production\"){const vite=await createViteServer({server:{middlewareMode:true},appType:\"spa\"});app.use(vite.middlewares)}else{app.use(express.static(path.join(__dirname,\"dist\")));app.get(\"*\",(req,res)=>{res.sendFile(path.join(__dirname,\"dist\",\"index.html\"))})}app.listen(PORT,\"0.0.0.0\",()=>{console.log(`\n\\u{1F680} MICROSERVICE API RUNNING on http://0.0.0.0:${PORT}`);console.log(`   Local access: http://localhost:${PORT}`)});\n","warnings":[],"map":{"version":3,"mappings":"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","names":["pool","brandKey","familyKey","priceKey","result"],"ignoreList":[],"sources":["/home/ubuntu/ameri/server.ts"],"sourcesContent":[null]}}