export default class AdminApiService {

  static async getAllUsers() {
    return (await fetch('/api/v1/admin/users')).json();
  }

  static async addStunServer(payload: { port: number, url: string }) {
    const options = {
      method: 'POST',
      body: JSON.stringify({
        type: 'STUN',
        ...payload
      }),
      headers: {
        'Content-Type': 'application/json'
      }
    }
    try {
      return (await fetch('/api/v1/admin/ice/stun', options)).json();
    } catch (error) {
      return error;
    }
  }

  static async addTurnServer(payload: { port: number, url: string, secret: string, protocols: string }) {
    const options = {
      method: 'POST',
      body: JSON.stringify({
        type: 'TURN',
        ...payload
      }),
      headers: {
        'Content-Type': 'application/json'
      }
    }
    try {
      return (await fetch('/api/v1/admin/ice/turn', options)).json();
    } catch (error) {
      return error;
    }
  }

  static async createConnection(payload: { child_id: number, email: string, is_parent: boolean }) {
    const options = {
      method: 'POST',
      body: JSON.stringify(payload),
      headers: {
        'Content-Type': 'application/json'
      }
    }
    try {
      return (await fetch('/api/v1/client/connections/create', options)).json();
    } catch (error) {
      return error;
    }
  }

  static async updateChildCover(child_id: number, profile_cover: string) {
    const options = {
      method: 'POST',
      body: JSON.stringify({
        profile_cover
      }),
      headers: {
        'Content-Type': 'application/json'
      }
    };
    try {
      const response = await fetch(`/api/v1/client/child/${child_id}/profile/cover`, options);
      console.log(response);
      return response.json();

    } catch (e) {
      console.error(e);
      return false;
    }
  };

  static async createCall(payload: { connection_id: number, child_id: number }) {
    const options = {
      method: 'POST',
      body: JSON.stringify(payload),
      headers: {
        'Content-Type': 'application/json'
      }
    };
    try {
      const response = await fetch('/api/v1/client/call/create', options);
      return response.json();

    } catch (e) {
      console.error(e);
      return false;
    }
  }

  static async createChild(name: string, dob: Date, avatar: string): Promise<any> {


    const options = {
      method: 'POST',
      body: JSON.stringify({
        name,
        dob,
        avatar
      }),
      headers: {
        'Content-Type': 'application/json'
      }
    };
    try {
      const response = await fetch('/api/v1/client/child/', options);
      console.log(response);
      return response.json();

    } catch (e) {
      console.error(e);
      return false;
    }
  }
}

interface IApiResponse {
  code: number;
  data?: any;
  message?: string;
}
