/**
 * Core TypeScript interfaces for the Web Carbon Analyzer
 */
export interface BrowserConfig {
    type: 'chromium' | 'firefox' | 'webkit';
    headless: boolean;
    timeout: number;
    networkIdleTimeout: number;
    waitForNetworkIdle: boolean;
    viewport: {
        width: number;
        height: number;
    };
    userAgent?: string;
    httpCredentials?: {
        username: string;
        password: string;
    };
    remoteDebuggingPort?: number;
}
export interface UserBehaviorConfig {
    scrollDepth: number;
    scrollDelay: number;
    maxScrollTime: number;
}
export interface CO2Config {
    model: 'swd' | '1byte';
    includeGreenHostingCheck: boolean;
}
export interface OutputConfig {
    format: 'json' | 'csv';
    includeResourceDetails: boolean;
    includeComparisons: boolean;
}
export interface LoggingConfig {
    level: string;
    console: boolean;
    file: boolean;
    filePath: string;
}
export interface LighthouseConfig {
    enabled?: boolean;
    port?: number;
    thresholds?: {
        performance?: number;
        accessibility?: number;
        'best-practices'?: number;
        seo?: number;
        pwa?: number;
    };
    opts?: Record<string, any>;
    config?: Record<string, any>;
    reports?: {
        formats?: {
            json?: boolean;
            html?: boolean;
            csv?: boolean;
        };
        name?: string;
        directory?: string;
    };
}
export interface AppConfig {
    browser: BrowserConfig;
    userBehavior: UserBehaviorConfig;
    co2: CO2Config;
    output: OutputConfig;
    logging: LoggingConfig;
    lighthouse?: LighthouseConfig;
}
export interface Resource {
    id: string;
    url: string;
    resourceType: string;
    method: string;
    requestTime: number;
    responseTime: number | null;
    size: {
        compressed: number | null;
        uncompressed: number | null;
    };
    status: number | null;
    headers: {
        request: Record<string, string>;
        response: Record<string, string> | null;
    };
    fromCache: boolean;
    error: string | null;
}
export interface ResourcesData {
    allResources: Resource[];
    totalResources: number;
    totalSize: number;
    totalDuration: number;
    sizeByType: Record<string, number>;
    resourcesByType: Record<string, Resource[]>;
    domains: Record<string, DomainData>;
}
export interface DomainData {
    size: number;
    count: number;
}
export interface EmissionsData {
    totalEmissions: number;
    byType: Record<string, TypeEmissions>;
    byDomain: Record<string, DomainEmissions>;
    byGreenHosting: GreenHostingEmissions;
    perResource: ResourceEmissions[];
    comparisons: Comparisons;
}
export interface TypeEmissions {
    size: number;
    emissions: number;
    count: number;
}
export interface DomainEmissions {
    size: number;
    emissions: number;
    count: number;
    isGreen: boolean | null;
}
export interface GreenHostingEmissions {
    green: TypeEmissions;
    nonGreen: TypeEmissions;
    unknown: TypeEmissions;
}
export interface ResourceEmissions {
    url: string;
    type: string;
    size: number;
    domain: string;
    isGreen: boolean | null;
    emissions: number;
}
export interface Comparisons {
    treeSeconds: number;
    carMeters: number;
    smartphoneCharges: number;
    waterBoiledML: number;
}
export interface LighthouseScores {
    performance: number;
    accessibility: number;
    bestPractices: number;
    seo: number;
    pwa: number;
}
export interface LighthouseMetrics {
    firstContentfulPaint: number | undefined;
    largestContentfulPaint: number | undefined;
    totalBlockingTime: number | undefined;
    speedIndex: number | undefined;
    timeToInteractive: number | undefined;
    cumulativeLayoutShift: number | undefined;
}
export interface LighthouseResults {
    scores: LighthouseScores;
    metrics: LighthouseMetrics;
    rawData?: Record<string, any>;
}
export interface FormattedResults {
    metadata: ResultsMetadata;
    summary: ResultsSummary;
    breakdowns: ResultsBreakdowns;
    resources?: ResourceEmissions[];
    lighthouse?: LighthouseResults;
}
export interface ResultsMetadata {
    url: string;
    timestamp: string;
    duration: number;
    configuration: Record<string, any>;
    [key: string]: any;
}
export interface ResultsSummary {
    totalEmissions: number;
    totalSize: number;
    totalRequests: number;
    percentageGreen: number;
    comparisons: Comparisons;
}
export interface ResultsBreakdowns {
    byType: Record<string, TypeEmissions>;
    byDomain: Record<string, DomainEmissions>;
    byHosting: Record<string, TypeEmissions>;
}
export interface ResultsSummary {
    totalEmissions: number;
    totalSize: number;
    totalRequests: number;
    percentageGreen: number;
    comparisons: Comparisons;
}
export interface ResultsBreakdowns {
    byType: Record<string, TypeEmissions>;
    byDomain: Record<string, DomainEmissions>;
    byHosting: Record<string, TypeEmissions>;
}
export interface CLIOptions {
    url?: string;
    output?: string;
    format?: 'json' | 'csv';
    timeout?: number;
    wait?: number;
    model?: 'swd' | '1byte';
    scrollDepth?: number;
    verbose?: boolean;
    quiet?: boolean;
    detailed?: boolean;
    headless?: boolean;
    viewport?: string;
    userAgent?: string;
    cookies?: string;
    htaccessUsername?: string;
    htaccessPassword?: string;
    greenHostingCheck?: boolean;
    lighthouse?: boolean;
    lighthousePort?: number;
    lighthousePerformanceThreshold?: number;
    lighthouseAccessibilityThreshold?: number;
    lighthouseBestPracticesThreshold?: number;
    lighthouseSeoThreshold?: number;
    [key: string]: any;
}
