import Encoder from 'encodable/lib/encoders/Encoder';
import createEncoderFactory from 'encodable/lib/encoders/createEncoderFactory';
import { DeriveEncoding, DeriveChannelOutputs } from 'encodable/lib/types/Encoding';

export type LineEncodingConfig = {
  x: ['X', number];
  y: ['Y', number];
  fill: ['Category', boolean];
  stroke: ['Color', string];
  strokeDasharray: ['Category', string];
  strokeWidth: ['Numeric', number];
};

export const lineEncoderFactory = createEncoderFactory<LineEncodingConfig>({
  channelTypes: {
    x: 'X',
    y: 'Y',
    fill: 'Category',
    stroke: 'Color',
    strokeDasharray: 'Category',
    strokeWidth: 'Numeric',
  },
  defaultEncoding: {
    x: { field: 'x', type: 'quantitative' },
    y: { field: 'y', type: 'quantitative' },
    fill: { value: false, legend: false },
    stroke: { value: '#222' },
    strokeDasharray: { value: '' },
    strokeWidth: { value: 1 },
  },
});

export type LineEncoding = DeriveEncoding<LineEncodingConfig>;

export type LineEncoder = Encoder<LineEncodingConfig>;

export type LineChannelOutputs = DeriveChannelOutputs<LineEncodingConfig>;
