/* eslint arrow-body-style: ["error", "always"] */

const endPoints = {
  resetPassword: {
    url: 'auth/password',
  },
  register: {
    url: 'api/v1/accounts.json',
  },
  validityCheck: {
    url: '/auth/validate_token',
  },
  logout: {
    url: 'auth/sign_out',
  },
  me: {
    url: 'api/v1/conversations.json',
    params: { type: 0, page: 1 },
  },

  getInbox: {
    url: 'api/v1/conversations.json',
    params: { inbox_id: null },
  },

  conversations(id) {
    return { url: `api/v1/conversations/${id}.json`, params: { before: null } };
  },

  resolveConversation(id) {
    return { url: `api/v1/conversations/${id}/toggle_status.json` };
  },

  sendMessage(conversationId, message) {
    return {
      url: `api/v1/conversations/${conversationId}/messages.json`,
      params: { message },
    };
  },

  addPrivateNote(conversationId, message) {
    return {
      url: `api/v1/conversations/${conversationId}/messages.json?`,
      params: { message, private: 'true' },
    };
  },

  fetchLabels: {
    url: 'api/v1/labels.json',
  },

  fetchInboxes: {
    url: 'api/v1/inboxes.json',
  },

  fetchAgents: {
    url: 'api/v1/agents.json',
  },

  addAgent: {
    url: 'api/v1/agents.json',
  },

  editAgent(id) {
    return { url: `api/v1/agents/${id}` };
  },

  deleteAgent({ id }) {
    return { url: `api/v1/agents/${id}` };
  },

  createChannel(channel, channelParams) {
    return {
      url: `api/v1/callbacks/register_${channel}_page.json`,
      params: channelParams,
    };
  },

  addAgentsToChannel: {
    url: 'api/v1/inbox_members.json',
    params: { user_ids: [], inbox_id: null },
  },

  fetchFacebookPages: {
    url: 'api/v1/callbacks/get_facebook_pages.json',
    params: { omniauth_token: '' },
  },

  assignAgent(conversationId, AgentId) {
    return {
      url: `/api/v1/conversations/${conversationId}/assignments?assignee_id=${AgentId}`,
    };
  },

  fbMarkSeen: {
    url: 'api/v1/facebook_indicators/mark_seen',
  },

  fbTyping(status) {
    return {
      url: `api/v1/facebook_indicators/typing_${status}`,
    };
  },

  markMessageRead(id) {
    return {
      url: `api/v1/conversations/${id}/update_last_seen`,
      params: {
        agent_last_seen_at: null,
      },
    };
  },

  // Canned Response [GET, POST, PUT, DELETE]
  cannedResponse: {
    get() {
      return {
        url: 'api/v1/canned_responses',
      };
    },
    getOne({ id }) {
      return {
        url: `api/v1/canned_responses/${id}`,
      };
    },
    post() {
      return {
        url: 'api/v1/canned_responses',
      };
    },
    put(id) {
      return {
        url: `api/v1/canned_responses/${id}`,
      };
    },
    delete(id) {
      return {
        url: `api/v1/canned_responses/${id}`,
      };
    },
  },

  reports: {
    account(metric, from, to) {
      return {
        url: `/api/v1/reports/account?metric=${metric}&since=${from}&to=${to}`,
      };
    },
    accountSummary(accountId, from, to) {
      return {
        url: `/api/v1/reports/${accountId}/account_summary?since=${from}&to=${to}`,
      };
    },
  },

  subscriptions: {
    get() {
      return {
        url: '/api/v1/subscriptions',
      };
    },
  },

  inbox: {
    delete(id) {
      return {
        url: `/api/v1/inboxes/${id}`,
      };
    },
    agents: {
      get(id) {
        return {
          url: `/api/v1/inbox_members/${id}.json`,
        };
      },
      post() {
        return {
          url: '/api/v1/inbox_members.json',
        };
      },
    },
  },
};

export default page => {
  return endPoints[page];
};
