import {
    Rio,
    RioClass,
    RioClassConstructor,
    RioMethod,
    RioMethodError,
    RioMethodModelType,
    RioMethodRequest
} from "riof";
import {GetStockInputModel, GetStockOutput} from "./models";

@RioClass({description: 'awesome class', accelerated: true})
export class Product extends Rio {

    constructor(instance?: RioClassConstructor) {
        super(instance);
    }

    @RioMethod({type: 'READ', inputModel: GetStockInputModel, outputModel: GetStockOutput})
    async getStock(request: RioMethodRequest<RioMethodModelType<typeof GetStockInputModel>>): Promise<RioMethodModelType<typeof GetStockOutput>> {
        if (request.body?.storeId === 'fd') {
            throw new RioMethodError({code: '44', message: 'error detail'});
        }

        return {
            stock: 2
        }
    }

    @RioMethod({type: 'READ', inputModel: GetStockInputModel, outputModel: GetStockOutput})
    async checkStock(request: RioMethodRequest<RioMethodModelType<typeof GetStockInputModel>>): Promise<RioMethodModelType<typeof GetStockOutput>> {
        return await this.getStock({
            body: {
                storeId: '123'
            }
        })
    }
}

