import type { SignatureConfig } from '../config/SignatureConfig';
import { SignatureScreenOrientation } from '../config/SignatureScreenOrientation';

const defaultConfig: SignatureConfig = {
  licenseKey: '',
  screenOrientation: SignatureScreenOrientation.PORTRAIT,
  pencilColor: '#000000',
  pencilWidth: 5,
  backgroundColor: '#FFFFFF',
  overlayColor: '#80000000',
  fontFamily: 'signaturesdk_opensans_bold',
  titleText: {
    enabled: true,
    content: 'Captura de assinatura digital',
    textColor: '#FFFFFF',
    textSize: 20,
  },
  backButton: {
    enabled: true,
    backgroundColor: '#00000000',
    buttonPadding: 0,
    buttonSize: { width: 56, height: 56 },
    iconOptions: {
      enabled: true,
      iconFile: 'signaturesdk_ic_close',
      iconColor: '#FFFFFF',
      iconSize: { width: 32, height: 32 },
    },
    labelOptions: {
      enabled: false,
      content: 'Voltar',
      textColor: '#323232',
      textSize: 14,
    },
  },
  saveButton: {
    enabled: true,
    backgroundColor: '#FFFFFF',
    buttonPadding: 0,
    buttonSize: { width: 56, height: 56 },
    iconOptions: {
      enabled: true,
      iconFile: 'signaturesdk_ic_save',
      iconColor: '#323232',
      iconSize: { width: 32, height: 32 },
    },
    labelOptions: {
      enabled: false,
      content: 'Salvar',
      textColor: '#323232',
      textSize: 14,
    },
  },
  deleteButton: {
    enabled: true,
    backgroundColor: '#FFFFFF',
    buttonPadding: 0,
    buttonSize: { width: 56, height: 56 },
    iconOptions: {
      enabled: true,
      iconFile: 'signaturesdk_ic_delete',
      iconColor: '#323232',
      iconSize: { width: 32, height: 32 },
    },
    labelOptions: {
      enabled: false,
      content: 'Deletar',
      textColor: '#323232',
      textSize: 14,
    },
  },
  undoButton: {
    enabled: true,
    backgroundColor: '#FFFFFF',
    buttonPadding: 0,
    buttonSize: { width: 56, height: 56 },
    iconOptions: {
      enabled: true,
      iconFile: 'signaturesdk_ic_undo',
      iconColor: '#323232',
      iconSize: { width: 32, height: 32 },
    },
    labelOptions: {
      enabled: false,
      content: 'Desfazer',
      textColor: '#323232',
      textSize: 14,
    },
  },
};

export function mergeConfigs(config: SignatureConfig): SignatureConfig {
  return {
    ...defaultConfig,
    ...config,
    titleText: {
      ...defaultConfig.titleText,
      ...config.titleText,
    },
    backButton: {
      ...defaultConfig.backButton,
      ...config.backButton,
      buttonSize: {
        ...defaultConfig.backButton?.buttonSize,
        ...config.backButton?.buttonSize,
      },
      iconOptions: {
        ...defaultConfig.backButton?.iconOptions,
        ...config.backButton?.iconOptions,
        iconSize: {
          ...defaultConfig.backButton?.iconOptions?.iconSize,
          ...config.backButton?.iconOptions?.iconSize,
        },
      },
      labelOptions: {
        ...defaultConfig.backButton?.labelOptions,
        ...config.backButton?.labelOptions,
      },
    },
    saveButton: {
      ...defaultConfig.saveButton,
      ...config.saveButton,
      buttonSize: {
        ...defaultConfig.saveButton?.buttonSize,
        ...config.saveButton?.buttonSize,
      },
      iconOptions: {
        ...defaultConfig.saveButton?.iconOptions,
        ...config.saveButton?.iconOptions,
        iconSize: {
          ...defaultConfig.saveButton?.iconOptions?.iconSize,
          ...config.saveButton?.iconOptions?.iconSize,
        },
      },
      labelOptions: {
        ...defaultConfig.saveButton?.labelOptions,
        ...config.saveButton?.labelOptions,
      },
    },
    deleteButton: {
      ...defaultConfig.deleteButton,
      ...config.deleteButton,
      buttonSize: {
        ...defaultConfig.deleteButton?.buttonSize,
        ...config.deleteButton?.buttonSize,
      },
      iconOptions: {
        ...defaultConfig.deleteButton?.iconOptions,
        ...config.deleteButton?.iconOptions,
        iconSize: {
          ...defaultConfig.deleteButton?.iconOptions?.iconSize,
          ...config.deleteButton?.iconOptions?.iconSize,
        },
      },
      labelOptions: {
        ...defaultConfig.deleteButton?.labelOptions,
        ...config.deleteButton?.labelOptions,
      },
    },
    undoButton: {
      ...defaultConfig.undoButton,
      ...config.undoButton,
      buttonSize: {
        ...defaultConfig.undoButton?.buttonSize,
        ...config.undoButton?.buttonSize,
      },
      iconOptions: {
        ...defaultConfig.undoButton?.iconOptions,
        ...config.undoButton?.iconOptions,
        iconSize: {
          ...defaultConfig.undoButton?.iconOptions?.iconSize,
          ...config.undoButton?.iconOptions?.iconSize,
        },
      },
      labelOptions: {
        ...defaultConfig.undoButton?.labelOptions,
        ...config.undoButton?.labelOptions,
      },
    },
  };
}
