import {APIGatewayEvent, ScheduledEvent, Callback, Context, Handler} from 'aws-lambda';
import {dynamoDb, upsert} from "../../utils/db";
import {errorHandler, successHandler} from "../../utils/apiResponse";
import {validateBusiness} from "../../utils/BusinessValidations";

type ImportBusinesses = {
    Items: BusinessInput[],
    Count: number,
    ScannedCount: number,
};

export const importBusinesses: Handler = async (event: APIGatewayEvent | ScheduledEvent, context: Context, callBack: Callback) => {

    const data: ImportBusinesses = JSON.parse((event as APIGatewayEvent).body);
    const errors: any[] = [];
    const results: any[] = [];

    data.Items.map(async (business) => {
        try {
            const validBusiness = validateBusiness(business);
            if (!validBusiness.isValid) {
                throw (validBusiness.errors);
            }

            const params: BusinessTable = {
                TableName: process.env.DYNAMODB_TABLE_BUSINESSES,

                Item: validBusiness.params,
            };
            const result = upsert(params);
            results.push(result);
        } catch (e) {
            errors.push({
                message: 'Failed to insert ' + business.businessName,
                error: e,
            });
        }
    });

    return successHandler(callBack, {errors, results});
}