import { QDialog } from 'quasar';
import { Archivos, DocumentActionBtn } from 'src/models';
import ContactLocationFields from 'src/pages/captaciones/contacto/ContactLocationFields.vue';
import ContactFormEditable from 'src/widgets/components/ContactFormEditable.vue';
import { ComputedRef, Ref } from 'vue';

export interface DocumentsDialogContext {
  documents: ComputedRef<any[]>;
  index: Ref<number>;
  rotationAngle: Ref<number>;
  runAction: (params: any) => void;
  documentFilter: {
    tags: string[];
    types: number[];
  };
  props: DocumentDialogProps;
  showDetails: Ref<boolean>;
  currentDetails: DocumentDialogCurrentDetails;
  showSaveBtn: Ref<boolean>;
  loading: Ref<boolean>;
  contactFormRef: Ref<typeof ContactFormEditable | null>;
  contactLocationFieldsRef: Ref<typeof ContactLocationFields | null>;
  dialogRef: Ref<QDialog | undefined>;
}

export interface DocumentDialogCurrentDetails {
  action: string;
  label: string;
  component: string | null;
  componentProps: Record<string, any> | null;
  half: boolean;
}

export const contextKey = Symbol('DocumentsDialogContext');

export interface DocumentDialogProps {
  onAction: Function;
  title?: string;
  documents: Array<Archivos>;
  rightSideBtns: Array<DocumentActionBtn>;
  rightBottomSideBtns: Array<DocumentActionBtn>;
  documentsCardHeight: string;
  params?: Record<string, any>;
  documentId?: number;
  loadingChecks?: boolean;
  loading?: boolean;
  allowNavigation: boolean;
}

export const DEFAULT_CURRENT_DETAILS: DocumentDialogCurrentDetails = {
  action: '',
  label: '',
  component: null,
  componentProps: null,
  half: false,
};
