// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only

import { fabric } from 'fabric';
import { customFabricObjectControls } from './util/customFabricObjectControls';

export class MediaEditorFabricIText extends fabric.IText {
  constructor(text: string, options: fabric.ITextOptions) {
    super(text, {
      fontFamily: 'Inter',
      fontWeight: 'bold',
      lockScalingFlip: true,
      originX: 'center',
      originY: 'center',
      textAlign: 'center',
      ...options,
    });

    this.on('modified', () => this.canvas?.bringToFront(this));
  }

  static override fromObject(
    // eslint-disable-next-line max-len
    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
    options: any,
    callback: (_: MediaEditorFabricIText) => unknown
  ): MediaEditorFabricIText {
    const result = new MediaEditorFabricIText(options.text, options);
    callback(result);
    return result;
  }
}

MediaEditorFabricIText.prototype.type = 'MediaEditorFabricIText';
MediaEditorFabricIText.prototype.lockScalingFlip = true;
MediaEditorFabricIText.prototype.borderColor = '#ffffff';
MediaEditorFabricIText.prototype.controls = customFabricObjectControls;