// tslint:disable:no-console
import * as redis from 'redis';

import { chevre } from '../../../../lib/index';

const project = { id: String(process.env.PROJECT_ID) };

const client = redis.createClient<redis.RedisDefaultModules, Record<string, never>, Record<string, never>>({
    socket: {
        port: Number(<string>process.env.REDIS_PORT),
        host: <string>process.env.REDIS_HOST
    },
    password: <string>process.env.REDIS_KEY
})
    .on('error', (err) => {
        // eslint-disable-next-line no-console
        console.error('createDefaultRedisClient: client onError:', err);
        // reject(err);
    });
client.connect();

// tslint:disable-next-line:max-func-body-length
async function main() {
    const rateLimitRepo = await chevre.repository.rateLimit.Offer.createInstance(
        client
    );

    // await rateLimitRepo.unlock({
    //     project: { id: project.id },
    //     reservedTicket: {
    //         ticketType: {
    //             validRateLimit: {
    //                 scope: 'scope2',
    //                 unitInSeconds: 60
    //             }
    //         }
    //     },
    //     reservationFor: {
    //         startDate: new Date()
    //     },
    //     reservationNumber: 'xxx'
    // });
    // console.log('unlocked');
    await rateLimitRepo.lock({
        project: { id: project.id },
        reservedTicket: {
            ticketType: {
                validRateLimit: {
                    scope: 'scope2',
                    unitInSeconds: 60
                }
            }
        },
        reservationFor: {
            startDate: new Date()
        },
        reservationNumber: 'xxx'
    });
    console.log('locked');
}

main()
    .then()
    .catch(console.error);
