import { DataType, Session, Shopify } from "@shopify/shopify-api";
import { ConfigShopifyMo, OrderStatus } from "./types";

export default class AdminRestApi {
    shopifyApi: Shopify
    session: Session

    constructor(shopifyApi: Shopify, config: ConfigShopifyMo) {
        this.shopifyApi = shopifyApi
        const sessionId = this.shopifyApi.session.getOfflineId(config.domain)
        this.session = new Session({
            id: sessionId,
            shop: config.domain,
            state: 'state',
            isOnline: false,
            accessToken: config.adminApiAccessToken
        });

    }

    findCustomer = async (customer_id: number | string, fields?: unknown) => {
        try {
            let customer = await this.shopifyApi.rest.Customer.find({
                session: this.session,
                id: customer_id
            })

            return customer
        } catch (error: any) {
            console.log('findCustomer ' + error.toString());
        }
        return null
    }

    findOrderOnCustomer = async (customer_id: number | string, status: OrderStatus = 'any') => {
        try {
            let ordersHistory: any = await this.shopifyApi.rest.Customer.orders({
                session: this.session,
                id: customer_id,
                status
            });

            return ordersHistory
        } catch (error: any) {
            console.log('findCustomerOrder ' + error.toString());
        }
        return null
    }

    getStorefrontAccessToken = async () => {
        const client = new this.shopifyApi.clients.Rest({ session: this.session })
        const storefrontTokenResponse: any = await client.post({
            path: 'storefront_access_tokens',
            type: DataType.JSON,
            data: {
                storefront_access_token: {
                    title: 'This is my test access token',
                },
            },
        });
        const storefrontAccessToken = storefrontTokenResponse.body['storefront_access_token']['access_token'];

        return storefrontAccessToken
    }
}