import React, { useState, useMemo } from 'react';
import { License, AIInsight } from '../types';
import { EditIcon, TrashIcon, CalendarIcon, PriceIcon, UserIcon, BriefcaseIcon, ArrowUpIcon, ArrowDownIcon } from './Icons';
import PriceHistoryChart from './PriceHistoryChart';
import { getAIInsights } from '../graphService';
interface LicenseItemProps {
license: License;
onEdit?: (license: License) => void;
onDelete?: (id: string) => void;
isReadOnly?: boolean;
}
const formatCurrency = (amount: number) => new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(amount || 0);
const formatDate = (dateStr: string | undefined | null) => dateStr ? new Date(dateStr).toLocaleDateString() : 'N/A';
const InfoPill: React.FC<{ icon: React.ReactNode; label: string; value: string; secondary?: React.ReactNode }> = ({ icon, label, value, secondary }) => (
);
const LicenseItem: React.FC = ({ license, onEdit, onDelete, isReadOnly }) => {
const [aiInsight, setAiInsight] = useState(null);
const [loadingAi, setLoadingAi] = useState(false);
const handleGetAIAdvice = async () => {
setLoadingAi(true);
try { setAiInsight(await getAIInsights(license)); } finally { setLoadingAi(false); }
};
// Calculate Price Delta
const priceAnalysis = useMemo(() => {
if (!license.renewals || license.renewals.length === 0) return null;
// Find the most recent renewal entry to compare against
const sortedRenewals = [...license.renewals].sort((a, b) =>
new Date(b.renewalDate).getTime() - new Date(a.renewalDate).getTime()
);
const previousPrice = sortedRenewals[0].renewalPrice;
if (previousPrice === 0 || license.purchasePrice === previousPrice) return null;
const delta = ((license.purchasePrice - previousPrice) / previousPrice) * 100;
return {
percent: Math.abs(delta).toFixed(1),
isIncrease: delta > 0
};
}, [license.purchasePrice, license.renewals]);
return (

{!license.isActive &&
Archived
}
{license.files && license.files.length > 0 && (
)}
{license.licenseName}
{license.tags?.map(tag => {tag})}
{license.companyName || 'Global'}
{license.vendorName} {license.vendorContact.name && `• ${license.vendorContact.name}`}
{license.vendorContact.email && 📧 {license.vendorContact.email}}
{license.vendorContact.phone && 📞 {license.vendorContact.phone}}
{!isReadOnly && (
)}
{aiInsight && (
🤖 Automated Strategy
{aiInsight.advice}
)}
} label="Owner" value={license.responsiblePerson || 'Unassigned'} />
}
label="Term Price"
value={formatCurrency(license.purchasePrice)}
secondary={priceAnalysis && (
{priceAnalysis.isIncrease ? : }
{priceAnalysis.percent}%
)}
/>
} label="Start Date" value={formatDate(license.purchaseDate)} />
} label="Renewal/End" value={formatDate(license.endDate)} />
Price Performance Analysis
);
};
export default LicenseItem;