/* Options:
Date: 2025-04-11 01:16:58
Version: 6.10
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://staging-api.billiecart.com.au

//GlobalNamespace: 
//MakePropertiesOptional: False
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
IncludeTypes: MaintainCarRequest.*
//ExcludeTypes: 
//DefaultImports: 
*/


export interface IReturn<T>
{
    createResponse(): T;
}

export interface ITenantedRequest
{
    organisationId?: string;
}

export class PutPatchOperationUnTenanted<TResponse> implements IPatch, IPut
{

    public constructor(init?: Partial<PutPatchOperationUnTenanted<TResponse>>) { (Object as any).assign(this, init); }
}

export class PutPatchOperationTenanted<TResponse> extends PutPatchOperationUnTenanted<TResponse> implements ITenantedRequest
{
    public organisationId?: string;

    public constructor(init?: Partial<PutPatchOperationTenanted<TResponse>>) { super(init); (Object as any).assign(this, init); }
}

// @DataContract
export class ResponseError
{
    // @DataMember(Order=1)
    public errorCode?: string;

    // @DataMember(Order=2)
    public fieldName?: string;

    // @DataMember(Order=3)
    public message?: string;

    // @DataMember(Order=4)
    public meta?: { [index: string]: string; };

    public constructor(init?: Partial<ResponseError>) { (Object as any).assign(this, init); }
}

// @DataContract
export class ResponseStatus
{
    // @DataMember(Order=1)
    public errorCode?: string;

    // @DataMember(Order=2)
    public message?: string;

    // @DataMember(Order=3)
    public stackTrace?: string;

    // @DataMember(Order=4)
    public errors?: ResponseError[];

    // @DataMember(Order=5)
    public meta?: { [index: string]: string; };

    public constructor(init?: Partial<ResponseStatus>) { (Object as any).assign(this, init); }
}

export class CarManufacturer
{
    public year: number;
    public make?: string;
    public model?: string;

    public constructor(init?: Partial<CarManufacturer>) { (Object as any).assign(this, init); }
}

export class CarLicensePlate
{
    public jurisdiction?: string;
    public number?: string;

    public constructor(init?: Partial<CarLicensePlate>) { (Object as any).assign(this, init); }
}

export class CarOwner
{
    public id?: string;

    public constructor(init?: Partial<CarOwner>) { (Object as any).assign(this, init); }
}

export class CarManager
{
    public id?: string;

    public constructor(init?: Partial<CarManager>) { (Object as any).assign(this, init); }
}

export class Car implements IIdentifiableResource
{
    public manufacturer?: CarManufacturer;
    public plate?: CarLicensePlate;
    public owner?: CarOwner;
    public managers?: CarManager[];
    public status?: string;
    public altered?: boolean;
    public id?: string;

    public constructor(init?: Partial<Car>) { (Object as any).assign(this, init); }
}

export interface IIdentifiableResource
{
    id?: string;
}

export class MaintainCarResponse
{
    public responseStatus?: ResponseStatus;
    public car?: Car;

    public constructor(init?: Partial<MaintainCarResponse>) { (Object as any).assign(this, init); }
}

// @Route("/cars/{Id}/maintain", "PUT,PATCH")
export class MaintainCarRequest extends PutPatchOperationTenanted<MaintainCarResponse> implements IReturn<MaintainCarResponse>
{
    public id?: string;
    public fromUtc: string;
    public toUtc: string;

    public constructor(init?: Partial<MaintainCarRequest>) { super(init); (Object as any).assign(this, init); }
    public getTypeName() { return 'MaintainCarRequest'; }
    public getMethod() { return 'PUT'; }
    public createResponse() { return new MaintainCarResponse(); }
}