interface LanguageInterface {
    id?: number;
    name: String;
    code: String;
    isDefault: boolean;
    isDriverEnabled: boolean;
    isCustomerEnabled: boolean;
    status: number;
}

interface Language{
    id:number;
    code:string;
    isDefault:boolean
}

interface LanguageInfo{
    requested:Language,
    default?:Language
}

interface LanguageRequestObject {
    name: string;
    code: string;
    isDefault: boolean | null;
    isDriverEnabled: boolean | null;
    isCustomerEnabled: boolean | null;
    status: number | null;
}

interface LanguageObject {
    name?: string;
    code?: string;
    isDefault?: boolean | null;
    isDriverEnabled?: boolean | null;
    isCustomerEnabled?: boolean | null;
    status?: number | null;
}

interface LanguageResponseObject {
    id: number;
    name: string;
    code: string;
    isDefault: boolean;
    isDriverEnabled: boolean;
    isCustomerEnabled: boolean;
    status: number;
    createdAt: Date;
    updatedAt: Date;
}

interface LanguageSummaryObject {
    id: number;
    name: string;
    code: string;
    isDefault: boolean;
    isDriverEnabled: boolean;
    isCustomerEnabled: boolean;
    status: number;
    createdAt: Date;
    updatedAt: Date;
}

interface LanguageIdentifierObject {
    id: number;
}

interface LanguageStringIdentifierObject {
    code: string;
}

interface LanguageStatusObject {
    status: number;
}

interface LanguageEnablementObject {
    isDriverEnabled: boolean;
    isCustomerEnabled: boolean;
}

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

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

interface LanguagePaginatedData {
    count: number;
    rows: LanguageSummaryObject[] | [];
}

interface LanguagePaginatedList {
    page: number;
    perPage: number;
    totalRecords: number;
    totalPages?: number;
    data: LanguageSummaryObject[] | [];
}

interface LanguageGetLanguageIdServiceInput {
    languageCode: string;
}

interface LanguageCreateServiceInput {
    name: string;
    code: string;
    isDefault: boolean | null;
    isDriverEnabled: boolean | null;
    isCustomerEnabled: boolean | null;
    status: number | null;
}

interface LanguageUpdateServiceInput {
    id: number;
    name: string;
    code: string;
    isDefault: boolean | null;
    isDriverEnabled: boolean | null;
    isCustomerEnabled: boolean | null;
    status: number | null;
}

interface LanguageUpdateEnablementServiceInput {
    id: number;
    isDriverEnabled: boolean;
    isCustomerEnabled: boolean;
}

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

interface LanguageDeleteServiceInput {
    id: number;
}

interface LanguageGetByIdServiceInput {
    id: number;
}

interface LanguageGetByCodeServiceInput {
    code: string;
}

interface LanguageGetLanguagesServiceInput {
    listRequest: LanguageListRequestObject;
}

interface LanguageGetAllLanguagesServiceInput {
    listRequest: LanguageListAllRequestObject;
}

interface LanguageGetLanguageIdDaoInput {
    languageCode: string;
}

interface LanguageGetDefaultAndCurrentLanguageDaoInput {
    languageCode: string;
}

interface LanguageGetRequestedLanguageDaoInput {
    languageCode: string;
}

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

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

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

interface LanguageDoExistsByIdDaoInput {
    id: number;
}

interface LanguageDoExistsByCodeDaoInput {
    code: string;
    excludeId?: number | null;
}

interface LanguageCreateDaoInput {
    languageObj: LanguageObject;
}

interface LanguageUpdateDaoInput {
    id: number;
    languageObj: LanguageObject;
}

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

interface LanguageUpdateEnablementDaoInput {
    id: number;
    isDriverEnabled: boolean;
    isCustomerEnabled: boolean;
}

interface LanguageDeleteDaoInput {
    id: number;
}

interface LanguageGetListDaoInput {
    listRequest: LanguageListRequestObject;
}

interface LanguageGetAllListDaoInput {
    listRequest: LanguageListAllRequestObject;
}
