import { BackgroundStyle } from '../common/Common';
import { ButtonConfiguration } from '../common/Common';
import { DeepPartial, PartiallyConstructible } from '../../utils';
import { ForegroundStyle } from '../common/Common';
import { IconStyle } from '../common/Common';
import { StatusBarMode } from '../common/TopBarConfiguration';
import { StyledText } from '../common/Common';

/**
Configuration of the camera permission request view.
*/
export class CameraPermissionScreen extends PartiallyConstructible {
  /**
    Determines the visual mode for displaying the contents of the status bar.
    Default is DARK
    */
  public statusBarMode: StatusBarMode = 'DARK';
  /**
    The background color of the camera permission request.
    Default is "?sbColorSurface"
    */
  public background: string = '?sbColorSurface';
  /**
    The background color of the icon used in the camera permission request.
    Default is "?sbColorOutline"
    */
  public iconBackground: string = '?sbColorOutline';
  /**
    Configuration of the icon used in the camera permission request.
    */
  public icon: IconStyle = new IconStyle({ visible: true, color: '?sbColorOnSurface' });
  /**
    Configuration of the camera permission request's confirmation button.
    */
  public enableCameraButton: ButtonConfiguration = new ButtonConfiguration({
    text: 'Grant permission',
    background: new BackgroundStyle({
      strokeColor: '?sbColorPrimary',
      fillColor: '?sbColorPrimary',
      strokeWidth: 0.0,
    }),
    foreground: new ForegroundStyle({
      iconVisible: false,
      color: '?sbColorOnPrimary',
      useShadow: false,
    }),
  });
  /**
    Configuration of the camera permission request's close button.
    */
  public closeButton: ButtonConfiguration = new ButtonConfiguration({
    text: 'Close',
    background: new BackgroundStyle({
      strokeColor: '#00000000',
      fillColor: '#00000000',
      strokeWidth: 0.0,
    }),
    foreground: new ForegroundStyle({
      iconVisible: false,
      color: '?sbColorPrimary',
      useShadow: false,
    }),
  });
  /**
    Configuration of the camera permission request's title.
    */
  public enableCameraTitle: StyledText = new StyledText({
    text: 'Camera permission denied!',
    color: '?sbColorOnSurface',
  });
  /**
    Configuration of the camera permission request's explanatory text.
    */
  public enableCameraExplanation: StyledText = new StyledText({
    text: 'Please allow the usage of the camera to start the scanning process.',
    color: '?sbColorOnSurfaceVariant',
  });

  /** @param source {@displayType `DeepPartial<CameraPermissionScreen>`} */
  public constructor(source: DeepPartial<CameraPermissionScreen> = {}) {
    super();
    if (source.statusBarMode !== undefined) {
      this.statusBarMode = source.statusBarMode;
    }
    if (source.background !== undefined) {
      this.background = source.background;
    }
    if (source.iconBackground !== undefined) {
      this.iconBackground = source.iconBackground;
    }
    if (source.icon !== undefined) {
      this.icon = new IconStyle(source.icon);
    }
    if (source.enableCameraButton !== undefined) {
      this.enableCameraButton = new ButtonConfiguration(source.enableCameraButton);
    }
    if (source.closeButton !== undefined) {
      this.closeButton = new ButtonConfiguration(source.closeButton);
    }
    if (source.enableCameraTitle !== undefined) {
      this.enableCameraTitle = new StyledText(source.enableCameraTitle);
    }
    if (source.enableCameraExplanation !== undefined) {
      this.enableCameraExplanation = new StyledText(source.enableCameraExplanation);
    }
  }
}
