import ws from 'ws';


const paper_credentials = {
    key : 'PKCSK7Z6WGNF6QDEKEG3',
    secret : '89JxFVaJ14BVa1xVzDL6gIZETsFHYl1cnseEVJog'
}
const live_livecredentials = {
    key : '', //not yet
    secret : ''
}


export class Alpaca {
    private credentials: {key: string, secret: string};
    private api_url : string;
    constructor(live = false) {
        if (live) {
            this.credentials = live_livecredentials;
            this.api_url = ''//
            throw new Error("not doing live yet");
        }
        else {
            this.credentials = paper_credentials;
            this.api_url = 'https://paper-api.alpaca.markets';
        }
    }

    private get(url: string) {
        //probably options
        return fetch(this.api_url + url, {
            method: 'GET',
            headers: {
                'APCA-API-KEY-ID': this.credentials.key,
                'APCA-API-SECRET-KEY': this.credentials.secret
            }
        });
    }
    private data(url: string) {
        return fetch( url, {
            method: 'GET',
            headers: {
                'APCA-API-KEY-ID': this.credentials.key,
                'APCA-API-SECRET-KEY': this.credentials.secret
            }
        });
    }
    
    public async getAccount() {
        const response = await this.get('/v2/account');
        return await response.json();
    }
    public async getPositions() {
        const response = await this.get('/v2/positions');
        return await response.json();
    }
    public async getOrders() {
        const response = await this.get('/v2/orders');
        return await response.json();
    }

    public async getAssets() {
        const response = await this.get('/v2/assets');
        return await response.json();
    }
    public async getAsset(symbol: string) {
        const response = await this.get('/v2/assets/' + symbol);
        return await response.json();
    }

    public async getWatchlists() {
        const response = await this.get('/v2/watchlists');
        return await response.json();
    }

    public async getCalendar() {
        const response = await this.get('/v2/calendar');
        return await response.json();
    }

    public async getClock() {
        const response = await this.get('/v2/clock');
        return await response.json();
    }

    public async getAccountConfigurations() {
        const response = await this.get('/v2/account/configurations');
        return await response.json();
    }
    public async getAccountActivities() {
        const response = await this.get('/v2/account/activities');
        return await response.json();
    }

    public async getPortfolioHistory() {
        const response = await this.get('/v2/account/portfolio/history');
        return await response.json();
    }

    public async getOrdersByPath() {
        const response = await this.get('/v2/orders');
        return await response.json();
    }

    public async getOrderByPath() {
        const response = await this.get('/v2/orders');
        return await response.json();
    }

    public async getOrderByClientOrderId() {
        const response = await this.get('/v2/orders');
        return await response.json();
    }

    public async getOrderByID() {
        const response = await this.get('/v2/orders');
        return await response.json();
    }
    public async getLatestQuote(symbol: string) {{
        const response = await this.data(`https://data.alpaca.markets/v2/stocks/${symbol}/quotes/latest`);
        return response.json();
      
    }}
    public async getLatestTrades(symbols: string[]) {
        console.log(symbols.length)
        console.log(symbols.join(','))
        const response = await this.data('https://data.alpaca.markets/v2/stocks/trades/latest?symbols=' + symbols.join(','));
        return response.json();
    }
}