export function autoInsuranceCalculator(form: FormTs) {
form.addRow(row => {
row.addTextPanel('header', {
computedValue: () => 'Auto Insurance Estimate Calculator',
customStyles: { 'font-size': '1.5rem', 'font-weight': '600', 'color': '#1e293b' }
});
});
form.addSpacer({ height: 20 });
// Vehicle Information Section
const vehicleSection = form.addSubform('vehicle', { title: '🚗 Vehicle Information' });
vehicleSection.addRow(row => {
row.addDropdown('vehicleType', {
label: 'Vehicle Type',
options: [
{ id: 'sedan', name: 'Sedan' },
{ id: 'suv', name: 'SUV / Crossover' },
{ id: 'truck', name: 'Pickup Truck' },
{ id: 'minivan', name: 'Minivan' },
{ id: 'coupe', name: 'Coupe' },
{ id: 'sports', name: 'Sports Car' },
{ id: 'luxury', name: 'Luxury Vehicle' },
{ id: 'electric', name: 'Electric Vehicle' },
{ id: 'hybrid', name: 'Hybrid' }
],
defaultValue: 'sedan',
isRequired: true
}, '1fr');
row.addDropdown('vehicleAge', {
label: 'Vehicle Age',
options: [
{ id: 'new', name: 'New (0-2 years)' },
{ id: 'recent', name: 'Recent (3-5 years)' },
{ id: 'used', name: 'Used (6-10 years)' },
{ id: 'older', name: 'Older (11-15 years)' },
{ id: 'classic', name: 'Classic (15+ years)' }
],
defaultValue: 'recent',
isRequired: true
}, '1fr');
});
vehicleSection.addRow(row => {
row.addMoney('vehicleValue', {
label: 'Estimated Vehicle Value',
min: 1000,
max: 500000,
defaultValue: 25000,
tooltip: 'Current market value of your vehicle'
}, '1fr');
row.addDropdown('usage', {
label: 'Primary Use',
options: [
{ id: 'pleasure', name: 'Pleasure / Personal' },
{ id: 'commute-short', name: 'Commute (under 10 miles)' },
{ id: 'commute-long', name: 'Commute (10+ miles)' },
{ id: 'business', name: 'Business Use' }
],
defaultValue: 'commute-short'
}, '1fr');
});
vehicleSection.addRow(row => {
row.addInteger('annualMileage', {
label: 'Annual Mileage',
min: 1000,
max: 100000,
defaultValue: 12000,
tooltip: 'Estimated miles driven per year'
});
});
// Driver Information Section
const driverSection = form.addSubform('driver', { title: '👤 Driver Information' });
driverSection.addRow(row => {
row.addDropdown('age', {
label: 'Driver Age',
options: [
{ id: '16-19', name: '16-19 years' },
{ id: '20-24', name: '20-24 years' },
{ id: '25-34', name: '25-34 years' },
{ id: '35-44', name: '35-44 years' },
{ id: '45-54', name: '45-54 years' },
{ id: '55-64', name: '55-64 years' },
{ id: '65+', name: '65+ years' }
],
defaultValue: '35-44',
isRequired: true
}, '1fr');
row.addDropdown('gender', {
label: 'Gender',
options: [
{ id: 'male', name: 'Male' },
{ id: 'female', name: 'Female' }
],
defaultValue: 'male'
}, '1fr');
});
driverSection.addRow(row => {
row.addDropdown('maritalStatus', {
label: 'Marital Status',
options: [
{ id: 'single', name: 'Single' },
{ id: 'married', name: 'Married' },
{ id: 'divorced', name: 'Divorced' },
{ id: 'widowed', name: 'Widowed' }
],
defaultValue: 'single'
}, '1fr');
row.addDropdown('creditScore', {
label: 'Credit Score Range',
options: [
{ id: 'excellent', name: 'Excellent (750+)' },
{ id: 'good', name: 'Good (700-749)' },
{ id: 'fair', name: 'Fair (650-699)' },
{ id: 'poor', name: 'Poor (below 650)' }
],
defaultValue: 'good',
tooltip: 'Credit affects rates in most states'
}, '1fr');
});
driverSection.addRow(row => {
row.addDropdown('drivingRecord', {
label: 'Driving Record (past 3 years)',
options: [
{ id: 'clean', name: 'Clean - No incidents' },
{ id: 'minor', name: '1-2 Minor violations' },
{ id: 'accident', name: '1 At-fault accident' },
{ id: 'multiple', name: 'Multiple incidents' },
{ id: 'dui', name: 'DUI/DWI on record' }
],
defaultValue: 'clean',
isRequired: true
});
});
// Coverage Section
const coverageSection = form.addSubform('coverage', { title: '🛡️ Coverage Options' });
coverageSection.addRow(row => {
row.addDropdown('liability', {
label: 'Liability Coverage',
options: [
{ id: 'state-min', name: 'State Minimum' },
{ id: '50-100', name: '50/100/50 ($50k/$100k/$50k)' },
{ id: '100-300', name: '100/300/100 (Recommended)' },
{ id: '250-500', name: '250/500/250 (High)' }
],
defaultValue: '100-300',
isRequired: true,
tooltip: 'Bodily injury per person/per accident/property damage'
}, '1fr');
row.addDropdown('deductible', {
label: 'Deductible',
options: [
{ id: '250', name: '$250' },
{ id: '500', name: '$500' },
{ id: '1000', name: '$1,000' },
{ id: '2000', name: '$2,000' }
],
defaultValue: '500',
tooltip: 'Amount you pay before insurance kicks in'
}, '1fr');
});
coverageSection.addRow(row => {
row.addCheckbox('collision', {
label: 'Collision Coverage',
defaultValue: true,
tooltip: 'Covers your vehicle in accidents'
}, '1fr');
row.addCheckbox('comprehensive', {
label: 'Comprehensive Coverage',
defaultValue: true,
tooltip: 'Covers theft, weather, vandalism'
}, '1fr');
});
coverageSection.addRow(row => {
row.addCheckbox('uninsured', {
label: 'Uninsured/Underinsured Motorist',
defaultValue: true,
tooltip: 'Protection from uninsured drivers'
}, '1fr');
row.addCheckbox('medical', {
label: 'Medical Payments Coverage',
defaultValue: false,
tooltip: 'Covers medical expenses regardless of fault'
}, '1fr');
});
coverageSection.addRow(row => {
row.addCheckbox('roadside', {
label: 'Roadside Assistance',
defaultValue: false,
tooltip: 'Towing, flat tire, lockout help'
}, '1fr');
row.addCheckbox('rental', {
label: 'Rental Car Reimbursement',
defaultValue: false,
tooltip: 'Covers rental while your car is repaired'
}, '1fr');
});
// Discounts Section
const discountsSection = form.addSubform('discounts', { title: '💰 Available Discounts' });
discountsSection.addRow(row => {
row.addCheckbox('multiCar', {
label: 'Multi-Car (2+ vehicles)',
defaultValue: false
}, '1fr');
row.addCheckbox('bundleHome', {
label: 'Bundle with Home/Renters',
defaultValue: false
}, '1fr');
});
discountsSection.addRow(row => {
row.addCheckbox('goodDriver', {
label: 'Good Driver (5+ years clean)',
defaultValue: false
}, '1fr');
row.addCheckbox('defensiveDriving', {
label: 'Defensive Driving Course',
defaultValue: false
}, '1fr');
});
discountsSection.addRow(row => {
row.addCheckbox('lowMileage', {
label: 'Low Mileage (under 7,500/year)',
defaultValue: false
}, '1fr');
row.addCheckbox('antiTheft', {
label: 'Anti-Theft Device',
defaultValue: false
}, '1fr');
});
discountsSection.addRow(row => {
row.addCheckbox('payInFull', {
label: 'Pay in Full Discount',
defaultValue: false
}, '1fr');
row.addCheckbox('paperless', {
label: 'Paperless / Autopay',
defaultValue: false
}, '1fr');
});
form.addSpacer({ height: 20, showLine: true, lineStyle: 'dashed' });
// Quote Section
const quoteSection = form.addSubform('quote', { title: '💵 Estimated Premium', isCollapsible: false });
quoteSection.addRow(row => {
row.addPriceDisplay('annualPremium', {
label: 'Estimated Annual Premium',
computedValue: () => {
// Base rate calculation
const vehicleType = vehicleSection.dropdown('vehicleType')?.value() || 'sedan';
const vehicleAge = vehicleSection.dropdown('vehicleAge')?.value() || 'recent';
const vehicleValue = vehicleSection.money('vehicleValue')?.value() || 25000;
const usage = vehicleSection.dropdown('usage')?.value() || 'commute-short';
const annualMileage = vehicleSection.integer('annualMileage')?.value() || 12000;
const age = driverSection.dropdown('age')?.value() || '35-44';
const gender = driverSection.dropdown('gender')?.value() || 'male';
const marital = driverSection.dropdown('maritalStatus')?.value() || 'single';
const credit = driverSection.dropdown('creditScore')?.value() || 'good';
const record = driverSection.dropdown('drivingRecord')?.value() || 'clean';
const liability = coverageSection.dropdown('liability')?.value() || '100-300';
const deductible = coverageSection.dropdown('deductible')?.value() || '500';
// Base rate by vehicle type
const vehicleRates: Record<string, number> = {
'sedan': 1200, 'suv': 1350, 'truck': 1300, 'minivan': 1250,
'coupe': 1400, 'sports': 1800, 'luxury': 2000, 'electric': 1500, 'hybrid': 1300
};
let base = vehicleRates[vehicleType] || 1200;
// Vehicle age multiplier
const ageMultipliers: Record<string, number> = {
'new': 1.15, 'recent': 1, 'used': 0.85, 'older': 0.7, 'classic': 0.9
};
base *= ageMultipliers[vehicleAge] || 1;
// Add value-based premium for collision/comprehensive
if (coverageSection.checkbox('collision')?.value()) {
base += vehicleValue * 0.02;
}
if (coverageSection.checkbox('comprehensive')?.value()) {
base += vehicleValue * 0.01;
}
// Usage multiplier
const usageMultipliers: Record<string, number> = {
'pleasure': 0.9, 'commute-short': 1, 'commute-long': 1.15, 'business': 1.25
};
base *= usageMultipliers[usage] || 1;
// Mileage adjustment
if (annualMileage > 15000) base *= 1.1;
if (annualMileage < 7500) base *= 0.9;
// Driver age multiplier
const driverAgeMultipliers: Record<string, number> = {
'16-19': 2.5, '20-24': 1.7, '25-34': 1.1, '35-44': 1,
'45-54': 0.95, '55-64': 1, '65+': 1.1
};
base *= driverAgeMultipliers[age] || 1;
// Gender (young males pay more)
if (gender === 'male' && ['16-19', '20-24'].includes(age)) {
base *= 1.15;
}
// Marital status
if (marital === 'married') base *= 0.95;
// Credit score
const creditMultipliers: Record<string, number> = {
'excellent': 0.85, 'good': 1, 'fair': 1.2, 'poor': 1.5
};
base *= creditMultipliers[credit] || 1;
// Driving record
const recordMultipliers: Record<string, number> = {
'clean': 1, 'minor': 1.2, 'accident': 1.4, 'multiple': 1.7, 'dui': 2.5
};
base *= recordMultipliers[record] || 1;
// Liability coverage
const liabilityMultipliers: Record<string, number> = {
'state-min': 0.7, '50-100': 0.9, '100-300': 1, '250-500': 1.2
};
base *= liabilityMultipliers[liability] || 1;
// Deductible discount
const deductibleDiscounts: Record<string, number> = {
'250': 1.1, '500': 1, '1000': 0.9, '2000': 0.8
};
base *= deductibleDiscounts[deductible] || 1;
// Additional coverages
if (coverageSection.checkbox('uninsured')?.value()) base += 100;
if (coverageSection.checkbox('medical')?.value()) base += 75;
if (coverageSection.checkbox('roadside')?.value()) base += 30;
if (coverageSection.checkbox('rental')?.value()) base += 50;
// Apply discounts
let discountRate = 1;
if (discountsSection.checkbox('multiCar')?.value()) discountRate -= 0.1;
if (discountsSection.checkbox('bundleHome')?.value()) discountRate -= 0.1;
if (discountsSection.checkbox('goodDriver')?.value()) discountRate -= 0.1;
if (discountsSection.checkbox('defensiveDriving')?.value()) discountRate -= 0.05;
if (discountsSection.checkbox('lowMileage')?.value()) discountRate -= 0.05;
if (discountsSection.checkbox('antiTheft')?.value()) discountRate -= 0.03;
if (discountsSection.checkbox('payInFull')?.value()) discountRate -= 0.05;
if (discountsSection.checkbox('paperless')?.value()) discountRate -= 0.02;
base *= Math.max(discountRate, 0.6); // Cap discounts at 40%
return Math.round(base);
},
variant: 'large'
});
});
quoteSection.addRow(row => {
row.addPriceDisplay('monthlyPremium', {
label: 'Monthly Payment',
computedValue: () => {
const vehicleType = vehicleSection.dropdown('vehicleType')?.value() || 'sedan';
const vehicleAge = vehicleSection.dropdown('vehicleAge')?.value() || 'recent';
const vehicleValue = vehicleSection.money('vehicleValue')?.value() || 25000;
const usage = vehicleSection.dropdown('usage')?.value() || 'commute-short';
const annualMileage = vehicleSection.integer('annualMileage')?.value() || 12000;
const age = driverSection.dropdown('age')?.value() || '35-44';
const gender = driverSection.dropdown('gender')?.value() || 'male';
const marital = driverSection.dropdown('maritalStatus')?.value() || 'single';
const credit = driverSection.dropdown('creditScore')?.value() || 'good';
const record = driverSection.dropdown('drivingRecord')?.value() || 'clean';
const liability = coverageSection.dropdown('liability')?.value() || '100-300';
const deductible = coverageSection.dropdown('deductible')?.value() || '500';
const vehicleRates: Record<string, number> = {
'sedan': 1200, 'suv': 1350, 'truck': 1300, 'minivan': 1250,
'coupe': 1400, 'sports': 1800, 'luxury': 2000, 'electric': 1500, 'hybrid': 1300
};
let base = vehicleRates[vehicleType] || 1200;
const ageMultipliers: Record<string, number> = {
'new': 1.15, 'recent': 1, 'used': 0.85, 'older': 0.7, 'classic': 0.9
};
base *= ageMultipliers[vehicleAge] || 1;
if (coverageSection.checkbox('collision')?.value()) base += vehicleValue * 0.02;
if (coverageSection.checkbox('comprehensive')?.value()) base += vehicleValue * 0.01;
const usageMultipliers: Record<string, number> = {
'pleasure': 0.9, 'commute-short': 1, 'commute-long': 1.15, 'business': 1.25
};
base *= usageMultipliers[usage] || 1;
if (annualMileage > 15000) base *= 1.1;
if (annualMileage < 7500) base *= 0.9;
const driverAgeMultipliers: Record<string, number> = {
'16-19': 2.5, '20-24': 1.7, '25-34': 1.1, '35-44': 1,
'45-54': 0.95, '55-64': 1, '65+': 1.1
};
base *= driverAgeMultipliers[age] || 1;
if (gender === 'male' && ['16-19', '20-24'].includes(age)) base *= 1.15;
if (marital === 'married') base *= 0.95;
const creditMultipliers: Record<string, number> = {
'excellent': 0.85, 'good': 1, 'fair': 1.2, 'poor': 1.5
};
base *= creditMultipliers[credit] || 1;
const recordMultipliers: Record<string, number> = {
'clean': 1, 'minor': 1.2, 'accident': 1.4, 'multiple': 1.7, 'dui': 2.5
};
base *= recordMultipliers[record] || 1;
const liabilityMultipliers: Record<string, number> = {
'state-min': 0.7, '50-100': 0.9, '100-300': 1, '250-500': 1.2
};
base *= liabilityMultipliers[liability] || 1;
const deductibleDiscounts: Record<string, number> = {
'250': 1.1, '500': 1, '1000': 0.9, '2000': 0.8
};
base *= deductibleDiscounts[deductible] || 1;
if (coverageSection.checkbox('uninsured')?.value()) base += 100;
if (coverageSection.checkbox('medical')?.value()) base += 75;
if (coverageSection.checkbox('roadside')?.value()) base += 30;
if (coverageSection.checkbox('rental')?.value()) base += 50;
let discountRate = 1;
if (discountsSection.checkbox('multiCar')?.value()) discountRate -= 0.1;
if (discountsSection.checkbox('bundleHome')?.value()) discountRate -= 0.1;
if (discountsSection.checkbox('goodDriver')?.value()) discountRate -= 0.1;
if (discountsSection.checkbox('defensiveDriving')?.value()) discountRate -= 0.05;
if (discountsSection.checkbox('lowMileage')?.value()) discountRate -= 0.05;
if (discountsSection.checkbox('antiTheft')?.value()) discountRate -= 0.03;
if (discountsSection.checkbox('payInFull')?.value()) discountRate -= 0.05;
if (discountsSection.checkbox('paperless')?.value()) discountRate -= 0.02;
base *= Math.max(discountRate, 0.6);
// Monthly with small fee
return Math.round((base / 12) * 1.03);
},
variant: 'success'
}, '1fr');
row.addPriceDisplay('savings', {
label: 'Your Discounts',
computedValue: () => {
let totalDiscount = 0;
if (discountsSection.checkbox('multiCar')?.value()) totalDiscount += 10;
if (discountsSection.checkbox('bundleHome')?.value()) totalDiscount += 10;
if (discountsSection.checkbox('goodDriver')?.value()) totalDiscount += 10;
if (discountsSection.checkbox('defensiveDriving')?.value()) totalDiscount += 5;
if (discountsSection.checkbox('lowMileage')?.value()) totalDiscount += 5;
if (discountsSection.checkbox('antiTheft')?.value()) totalDiscount += 3;
if (discountsSection.checkbox('payInFull')?.value()) totalDiscount += 5;
if (discountsSection.checkbox('paperless')?.value()) totalDiscount += 2;
return Math.min(totalDiscount, 40);
},
variant: 'default',
suffix: '% off'
}, '1fr');
});
// Summary Section
const summarySection = form.addSubform('summary', {
title: '📋 Summary',
isCollapsible: false,
sticky: 'bottom'
});
summarySection.addRow(row => {
row.addTextPanel('summaryText', {
computedValue: () => {
const vehicleType = vehicleSection.dropdown('vehicleType')?.value() || 'sedan';
const liability = coverageSection.dropdown('liability')?.value() || '100-300';
const vehicleLabels: Record<string, string> = {
'sedan': 'Sedan', 'suv': 'SUV', 'truck': 'Truck', 'minivan': 'Minivan',
'coupe': 'Coupe', 'sports': 'Sports Car', 'luxury': 'Luxury', 'electric': 'EV', 'hybrid': 'Hybrid'
};
const liabilityLabels: Record<string, string> = {
'state-min': 'State Minimum', '50-100': '50/100/50', '100-300': '100/300/100', '250-500': '250/500/250'
};
const hasCollision = coverageSection.checkbox('collision')?.value();
const hasComprehensive = coverageSection.checkbox('comprehensive')?.value();
let coverage = liabilityLabels[liability];
if (hasCollision && hasComprehensive) coverage += ' + Full Coverage';
else if (hasCollision) coverage += ' + Collision';
else if (hasComprehensive) coverage += ' + Comprehensive';
return `${vehicleLabels[vehicleType]} | ${coverage}`;
},
customStyles: { 'font-size': '0.95rem', 'font-weight': '500', 'text-align': 'center', 'color': '#1e293b' }
});
});
summarySection.addRow(row => {
row.addTextPanel('disclaimer', {
computedValue: () => 'This is an estimate only. Actual premiums vary by insurer and location. Get quotes from multiple providers.',
customStyles: { 'font-size': '0.8rem', 'color': '#64748b', 'text-align': 'center' }
});
});
form.configureSubmitButton({
label: 'Get Official Quote'
});
}