export interface ProductRow {
    id: number;
    user_id: number;
    name: string;
    brand: string;
    model: string;
    category: string;
    purchase_date: string;
    purchase_price: string | null;
    vendor: string;
    serial_number: string;
    receipt_image: string | null;
    legal_warranty_months: number;
    warranty_end_date: string;
    has_extended_warranty: boolean;
    extended_warranty_end_date: string | null;
    extended_warranty_provider: string;
    extended_warranty_notes: string;
    has_insurance: boolean;
    insurance_end_date: string | null;
    insurance_provider: string;
    insurance_policy_number: string;
    notes: string;
    is_second_hand: boolean;
    created_at: string;
    updated_at: string;
    days_remaining: number;
    effective_end_date: string;
    effective_type: string;
    status: "active" | "warning" | "critical" | "expired";
    progress: number;
}
export interface WarrantyReminderCandidate {
    product_id: number;
    user_id: number;
    user_name: string;
    user_email: string;
    warranty_email_enabled: boolean;
    warranty_push_enabled: boolean;
    product_name: string;
    brand: string;
    model: string;
    category: string;
    warranty_end_date: string;
    effective_end_date: string;
}
export declare const SELECT_WITH_COMPUTED = "\n  SELECT\n    p.*,\n    GREATEST(\n      p.warranty_end_date,\n      CASE WHEN p.has_extended_warranty THEN p.extended_warranty_end_date ELSE NULL END,\n      CASE WHEN p.has_insurance         THEN p.insurance_end_date          ELSE NULL END\n    ) AS effective_end_date,\n    CASE\n      WHEN p.has_insurance AND p.insurance_end_date >= GREATEST(\n        p.warranty_end_date,\n        COALESCE(CASE WHEN p.has_extended_warranty THEN p.extended_warranty_end_date END, p.warranty_end_date)\n      ) THEN 'insurance'\n      WHEN p.has_extended_warranty AND p.extended_warranty_end_date >= p.warranty_end_date THEN 'extended'\n      ELSE 'legal'\n    END AS effective_type,\n    (GREATEST(\n      p.warranty_end_date,\n      CASE WHEN p.has_extended_warranty THEN p.extended_warranty_end_date ELSE NULL END,\n      CASE WHEN p.has_insurance         THEN p.insurance_end_date          ELSE NULL END\n    ) - CURRENT_DATE)::int AS days_remaining,\n    LEAST(100, GREATEST(0,\n      ROUND(\n        (CURRENT_DATE - p.purchase_date)::numeric /\n        NULLIF((\n          GREATEST(\n            p.warranty_end_date,\n            CASE WHEN p.has_extended_warranty THEN p.extended_warranty_end_date ELSE NULL END,\n            CASE WHEN p.has_insurance         THEN p.insurance_end_date          ELSE NULL END\n          ) - p.purchase_date\n        )::numeric, 0) * 100\n      )\n    ))::int AS progress,\n    CASE\n      WHEN GREATEST(\n        p.warranty_end_date,\n        CASE WHEN p.has_extended_warranty THEN p.extended_warranty_end_date ELSE NULL END,\n        CASE WHEN p.has_insurance         THEN p.insurance_end_date          ELSE NULL END\n      ) < CURRENT_DATE THEN 'expired'\n      WHEN GREATEST(\n        p.warranty_end_date,\n        CASE WHEN p.has_extended_warranty THEN p.extended_warranty_end_date ELSE NULL END,\n        CASE WHEN p.has_insurance         THEN p.insurance_end_date          ELSE NULL END\n      ) <= CURRENT_DATE + INTERVAL '30 days' THEN 'critical'\n      WHEN GREATEST(\n        p.warranty_end_date,\n        CASE WHEN p.has_extended_warranty THEN p.extended_warranty_end_date ELSE NULL END,\n        CASE WHEN p.has_insurance         THEN p.insurance_end_date          ELSE NULL END\n      ) <= CURRENT_DATE + INTERVAL '90 days' THEN 'warning'\n      ELSE 'active'\n    END AS status\n  FROM products p\n";
export declare function listProducts(userId: number): Promise<ProductRow[]>;
export declare function getProduct(userId: number, id: number): Promise<ProductRow | null>;
export declare function getDashboardStats(userId: number): Promise<{
    total: number;
    active: number;
    warning: number;
    critical: number;
    expired: number;
    expiringSoon: ProductRow[];
    recentlyAdded: ProductRow[];
}>;
export interface CreateProductInput {
    userId: number;
    name: string;
    brand: string;
    model: string;
    category: string;
    purchaseDate: string;
    purchasePrice: number | null;
    vendor: string;
    serialNumber: string;
    receiptImage?: string | null;
    legalWarrantyMonths: number;
    warrantyEndDate: string;
    hasExtendedWarranty: boolean;
    extendedWarrantyEndDate?: string | null;
    extendedWarrantyProvider: string;
    extendedWarrantyNotes: string;
    hasInsurance: boolean;
    insuranceEndDate?: string | null;
    insuranceProvider: string;
    insurancePolicyNumber: string;
    notes: string;
    isSecondHand: boolean;
    purchaseDocumentId?: number | null;
    purchaseDocumentLineId?: number | null;
}
export declare function createProduct(input: CreateProductInput): Promise<ProductRow>;
export declare function updateProduct(id: number, input: Partial<CreateProductInput>): Promise<ProductRow | null>;
export declare function deleteProduct(userId: number, id: number): Promise<boolean>;
export declare function getNotifications(userId: number): Promise<ProductRow[]>;
export declare function listWarrantyReminderCandidates(daysAhead: number, limit: number): Promise<WarrantyReminderCandidate[]>;
export declare function countWarrantyReminderCandidates(daysAhead: number): Promise<number>;
//# sourceMappingURL=products.service.d.ts.map