interface NotificationInterface {
    id?: number;
    code: string;
    userId: number;
    accountId: number;
    imageId: number | null;
    replacements: string;
    lastUpdatedBy?: number;
    isRevision?: Boolean;
    revisionId?: number;
    status: number;
    sortOrder?: number;
    NotificationContent?: NotificationContentObject;
    NotificationContents?: NotificationContentObject[];
}

interface NotificationContentInterface {
    id?: number;
    notificationId?: number;
    languageId?: number;
    title: string;
    body: Text | null;
    bodyText: Text | null;
}

interface NotificationRequestObject {
    title: string;
    body: Text;
    code: string;
    status: number | null;
    imageId: number | null;
}

interface NotificationObject {
    id?: number;
    code: string;
    replacements?: string;
    status: number | null;
    imageId: number | null;
}

interface NotificationContentObject {
    id?: number;
    notificationId?: number;
    title: string;
    body: Text;
    bodyText?: Text | null;
}

interface NotificationObjectInteface {
    id: number;
    code: string;
    status: number;
    replacements: string,
    title: string;
    body?: Text | null;
    bodyText?: Text | null;
    author: UserPublicObjectInterface | null;
    lastUpdatedBy: UserPublicObjectInterface | null;
    notificationImage: fileObject | null;
    createdAt: Date;
    updatedAt: Date;
}

interface NotificationObjectSummaryInteface {
    id: number;
    code: string;
    status: number;
    title: string;
    body?: Text | null;
    bodyText?: Text | null;
    createdAt: Date;
    updatedAt: Date;
}

interface NotificationDataObject {
    id?: number;
    code?: string;
    userId: number | null;
    accountId: number | null;
    lastUpdatedBy?: number;
    notificationContents?: NotificationContentObject[];
    notificationContent?: NotificationContentObject;
}

interface NotificationListRequestObject {
    status: number | null;
    page: number;
    perPage: number;
    searchText: string | null;
    sortBy: string;
    sortDirection: string;
}

interface NotificationListAllRequestObject {
    status: number | null;
    page: number;
    perPage: number;
    searchText: string | null;
    sortBy: string;
    sortDirection: string;
}

interface NotificationPaginatedList {
    page: number;
    perPage: number;
    totalRecords: number;
    totalPages?: number;
    data: NotificationObjectSummaryInteface[] | [];
}

interface NotificationPaginatedData {
    count: number;
    rows: NotificationObjectSummaryInteface[];
}

interface NotificationSortRequest {
    before: number | null;
    after: number | null;
}

interface NotificationIdentifierObject {
    id: number;
}

interface NotificationStatusObject {
    status: number;
}

interface DaoOptions {
    transaction?: import("sequelize").Transaction;
}

interface NotificationCreateServiceInput {
    title: string;
    body: Text;
    code: string;
    status: number | null;
    imageId: number | null;
}

interface NotificationUpdateServiceInput {
    id: number;
    title: string;
    body: Text;
    code: string;
    status: number | null;
    imageId: number | null;
}

interface NotificationDeleteServiceInput {
    id: number;
}

interface NotificationGetByIdServiceInput {
    id: number;
    expanded?: boolean;
}

interface NotificationGetByCodeServiceInput {
    code: string;
    expanded?: boolean;
}

interface NotificationGetNotificationsServiceInput {
    listRequest: NotificationListRequestObject;
    language?: string | null;
}

interface NotificationGetAllNotificationsServiceInput {
    listRequest: NotificationListAllRequestObject;
    language?: string | null;
}

interface NotificationGetNotificationsRevisionsServiceInput {
    id: number;
    listRequest: NotificationListRequestObject;
    language?: string | null;
}

interface NotificationRestoreRevisionServiceInput {
    id: number;
}

interface NotificationGetNotificationIdServiceInput {
    code: string;
}

interface NotificationSendServiceInput {
    code: string;
    replacements?: any;
}

interface NotificationSetSortOrderServiceInput {
    id: number;
    before: number | null;
    after: number | null;
}

interface NotificationUpdateStatusServiceInput {
    id: number;
    status: number;
}

interface NotificationGetDaoInput {
    id?: number | null;
    code?: string | null;
    expanded?: boolean;
    paranoid?: boolean;
}

interface NotificationGetByIdDaoInput {
    id: number;
    expanded?: boolean;
    paranoid?: boolean;
}

interface NotificationGetByCodeDaoInput {
    code: string;
    expanded?: boolean;
    paranoid?: boolean;
}

interface NotificationDoExistsByCodeDaoInput {
    code: string;
    excludeId?: number | null;
    includeRevision?: boolean;
}

interface NotificationDoExistsByIdDaoInput {
    id: number;
    includeRevision?: boolean;
}

interface NotificationCreateDaoInput {
    notificationObj: NotificationObject;
    notificationContentObj: NotificationContentObject;
    languages: LanguageInfo;
}

interface NotificationUpdateDaoInput {
    id: number;
    notificationObj: NotificationObject;
    notificationContentObj: NotificationContentObject;
    languages: LanguageInfo;
}

interface NotificationDeleteDaoInput {
    id: number;
}

interface NotificationSetSortOrderDaoInput {
    id: number;
    before?: number | null;
    after?: number | null;
}

interface NotificationGetListDaoInput {
    listRequest: NotificationListRequestObject;
    language?: string | null;
}

interface NotificationGetAllDaoInput {
    listRequest: NotificationListAllRequestObject;
    language?: string | null;
}

interface NotificationGetRevisionListDaoInput {
    id: number;
    listRequest: NotificationListRequestObject;
    language?: string | null;
}

interface NotificationRestoreRevisionDaoInput {
    id: number;
}

interface NotificationGetIdFromCodeDaoInput {
    code: string;
}

interface NotificationUpdateStatusDaoInput {
    id: number;
    status: number;
}
