interface FaqInterface {
    id?: number;
    code: string;
    userId: number;
    accountId: number | null;
    categoryId: number | null;
    lastUpdatedBy?: number | null;
    isRevision?: Boolean;
    revisionId?: number;
    status: number;
    sortOrder?: number;
    faqContent?: FaqContentInterface,
    faqContents?: FaqContentInterface[];
}

interface FaqContentInterface {
    id?: number;
    faqId?: number;
    languageId: number;
    question: string;
    answer: Text | null;
    answerText: Text | null;
}

interface faqRequest {
    categoryCode: string | null;
    question: string;
    answer: Text | null;
    answerText: Text | null;
    code: string;
    status: number | null;
}

interface faqObject {
    code: string;
    status: number | null;
    categoryId: number | null;
    lastUpdatedBy?: number | null;
}

interface faqContentObject {
    id?: number;
    faqId?: number;
    question: string;
    answer: Text | null;
    answerText?: Text | null;
    languageId?: number;
}

interface faqDataObject {
    id?: number;
    code?: string | null;
    categoryId: number | null;
    userId: number | null;
    accountId: number | null;
    lastUpdatedBy?: number | null;
    faqContents?: faqContentObject[];
    faqContent?: faqContentObject
}

interface faqCategory {
    id: number;
    code: string;
    name: string;
}

interface faqObjectInteface {
    id: number;
    code: string;
    status: number;
    faqCategory: faqCategory;
    author: UserPublicObjectInterface | null;
    lastUpdatedBy: UserPublicObjectInterface | null,
    question: string;
    answer: Text | null;
    answerText: Text | null;
    createdAt: Date,
    updatedAt: Date
}

interface faqObjectSummaryInteface {
    id: number;
    code: string;
    status: number;
    question: string;
    answer: Text | null;
    answerText: Text | null;
    createdAt: Date,
    updatedAt: Date
}

interface FaqTree {
    category: categoryObjectInteface,
    faqs: faqObjectInteface[] | faqObjectSummaryInteface[]
    childTree: FaqTree[] | []
}

interface FaqPaginatedData {
    count: number;
    rows: faqObjectSummaryInteface[] | []
}

interface FaqPaginatedList {
    page: number;
    perPage: number;
    totalRecords: number;
    totalPages?: number;
    data: faqObjectSummaryInteface[] | [];
}

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

interface FaqListAllRequestObject {
    searchText: string | null;
    sortBy: string;
    sortDirection: string;
    status: number | null
    categoryCode: string | null;
}

interface FaqIdentifierObject {
    id: number;
}

interface FaqCategoryIdentifierObject {
    categoryId: number;
}

interface FaqCategoryCodeIdentifierObject {
    categoryCode: string | null;
}

interface FaqStringIdentifierObject {
    code: string;
}

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

interface FaqStatusObject {
    status: number;
}

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

interface FaqCreateServiceInput {
    categoryCode: string | null;
    question: string;
    answer: Text | null;
    status: number | null;
}

interface FaqUpdateServiceInput {
    id: number;
    categoryCode: string | null;
    question: string;
    answer: Text | null;
    status: number | null;
}

interface FaqDeleteServiceInput {
    id: number;
}

interface FaqGetByIdServiceInput {
    id: number;
}

interface FaqGetByCodeServiceInput {
    code: string;
}

interface FaqGetFaqsServiceInput {
    listRequest: FaqListRequestObject;
    status?: number | null;
}

interface FaqGetAllFaqsServiceInput {
    listRequest: FaqListAllRequestObject;
}

interface FaqGetFaqRevisionsServiceInput {
    id: number;
    listRequest: FaqListRequestObject;
}

interface FaqRestoreRevisionServiceInput {
    id: number;
}

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

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

interface FaqGetCategoryIdServiceInput {
    categoryCode: string;
}

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

interface FaqGetByIdDaoInput {
    id: number;
    paranoid?: boolean;
}

interface FaqGetByCodeDaoInput {
    code: string;
    paranoid?: boolean;
}

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

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

interface FaqCreateDaoInput {
    faqObj: faqObject;
    faqContentObj: faqContentObject;
    languages: LanguageInfo;
}

interface FaqUpdateDaoInput {
    id: number;
    faqObj: faqObject;
    faqContentObj: faqContentObject;
    languages: LanguageInfo;
}

interface FaqDeleteDaoInput {
    id: number;
}

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

interface FaqGetFaqListDaoInput {
    categoryId: number | null;
    listRequest: FaqListRequestObject;
}

interface FaqGetAllFaqsDaoInput {
    categoryId: number | null;
    listRequest: FaqListAllRequestObject;
}

interface FaqGetFaqRevisionListDaoInput {
    id: number;
    listRequest: FaqListRequestObject;
}

interface FaqRestoreRevisionDaoInput {
    id: number;
}

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