import type { MimeTypeAction } from './squared';

import type { BroadcastValue, LogTime } from './logger';
import type { ImageModule } from './settings';

export interface CommandData {
    value: string;
    resize?: ResizeData | null;
    crop?: CropData | null;
    rotate?: RotateData | null;
    quality?: QualityData | null;
    method?: MethodData | null;
    opacity?: number;
}

export interface RotateData {
    values: number[];
    color: number;
}

export interface ResizeData extends Dimension {
    mode: string;
    color: number;
    align: [string | undefined, string | undefined];
    algorithm?: string;
}

export interface CropData extends Point, Dimension {}

export interface QualityData {
    value: number;
    nearLossless: number;
    method: number;
    preset?: string;
}

export interface TransformOptions extends MimeTypeAction {
    tempFile?: boolean;
    startTime?: LogTime;
    module?: ImageModule;
    broadcastId?: BroadcastValue;
    cache?: boolean;
}

export interface Point {
    x: number;
    y: number;
}

export interface Dimension {
    width: number;
    height: number;
}

export type MethodData = [string, unknown[]?][];