/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "msgCore.h"  // precompiled header...

#include "nsNoneService.h"
#include "nsINoIncomingServer.h"
#include "nsINoneService.h"
#include "nsIMsgProtocolInfo.h"

#include "nsIFile.h"
#include "nsCOMPtr.h"
#include "nsMsgUtils.h"

#include "nsMailDirServiceDefs.h"

#define PREF_MAIL_ROOT_NONE_REL "mail.root.none-rel"
// old - for backward compatibility only
#define PREF_MAIL_ROOT_NONE "mail.root.none"

nsNoneService::nsNoneService() {}

nsNoneService::~nsNoneService() {}

NS_IMPL_ISUPPORTS(nsNoneService, nsINoneService, nsIMsgProtocolInfo)

NS_IMETHODIMP
nsNoneService::SetDefaultLocalPath(nsIFile* aPath) {
  NS_ENSURE_ARG(aPath);
  return NS_SetPersistentFile(PREF_MAIL_ROOT_NONE_REL, PREF_MAIL_ROOT_NONE,
                              aPath);
}

NS_IMETHODIMP
nsNoneService::GetDefaultLocalPath(nsIFile** aResult) {
  NS_ENSURE_ARG_POINTER(aResult);
  *aResult = nullptr;

  bool havePref;
  nsCOMPtr<nsIFile> localFile;
  nsresult rv = NS_GetPersistentFile(PREF_MAIL_ROOT_NONE_REL,
                                     PREF_MAIL_ROOT_NONE, NS_APP_MAIL_50_DIR,
                                     havePref, getter_AddRefs(localFile));
  if (NS_FAILED(rv)) return rv;

  bool exists;
  rv = localFile->Exists(&exists);
  if (NS_SUCCEEDED(rv) && !exists)
    rv = localFile->Create(nsIFile::DIRECTORY_TYPE, 0775);
  if (NS_FAILED(rv)) return rv;

  if (!havePref || !exists) {
    rv = NS_SetPersistentFile(PREF_MAIL_ROOT_NONE_REL, PREF_MAIL_ROOT_NONE,
                              localFile);
    NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to set root dir pref.");
  }

  localFile.forget(aResult);
  return NS_OK;
}

NS_IMETHODIMP
nsNoneService::GetServerIID(nsIID** aServerIID) {
  *aServerIID = new nsIID(NS_GET_IID(nsINoIncomingServer));
  return NS_OK;
}

NS_IMETHODIMP
nsNoneService::GetRequiresUsername(bool* aRequiresUsername) {
  NS_ENSURE_ARG_POINTER(aRequiresUsername);
  *aRequiresUsername = true;
  return NS_OK;
}

NS_IMETHODIMP
nsNoneService::GetPreflightPrettyNameWithEmailAddress(
    bool* aPreflightPrettyNameWithEmailAddress) {
  NS_ENSURE_ARG_POINTER(aPreflightPrettyNameWithEmailAddress);
  *aPreflightPrettyNameWithEmailAddress = true;
  return NS_OK;
}

NS_IMETHODIMP
nsNoneService::GetCanLoginAtStartUp(bool* aCanLoginAtStartUp) {
  NS_ENSURE_ARG_POINTER(aCanLoginAtStartUp);
  *aCanLoginAtStartUp = false;
  return NS_OK;
}

NS_IMETHODIMP
nsNoneService::GetCanDelete(bool* aCanDelete) {
  NS_ENSURE_ARG_POINTER(aCanDelete);
  *aCanDelete = false;
  return NS_OK;
}

NS_IMETHODIMP
nsNoneService::GetCanDuplicate(bool* aCanDuplicate) {
  NS_ENSURE_ARG_POINTER(aCanDuplicate);
  *aCanDuplicate = false;
  return NS_OK;
}

NS_IMETHODIMP
nsNoneService::GetCanGetMessages(bool* aCanGetMessages) {
  NS_ENSURE_ARG_POINTER(aCanGetMessages);
  *aCanGetMessages = false;
  return NS_OK;
}

NS_IMETHODIMP
nsNoneService::GetCanGetIncomingMessages(bool* aCanGetIncomingMessages) {
  NS_ENSURE_ARG_POINTER(aCanGetIncomingMessages);
  *aCanGetIncomingMessages = false;
  return NS_OK;
}

NS_IMETHODIMP
nsNoneService::GetDefaultDoBiff(bool* aDoBiff) {
  NS_ENSURE_ARG_POINTER(aDoBiff);
  // by default, don't do biff for "none" servers
  *aDoBiff = false;
  return NS_OK;
}

NS_IMETHODIMP
nsNoneService::GetDefaultServerPort(bool isSecure, int32_t* aDefaultPort) {
  NS_ENSURE_ARG_POINTER(aDefaultPort);
  *aDefaultPort = -1;
  return NS_OK;
}

NS_IMETHODIMP
nsNoneService::GetShowComposeMsgLink(bool* showComposeMsgLink) {
  NS_ENSURE_ARG_POINTER(showComposeMsgLink);
  *showComposeMsgLink = false;
  return NS_OK;
}

NS_IMETHODIMP
nsNoneService::GetFoldersCreatedAsync(bool* aAsyncCreation) {
  NS_ENSURE_ARG_POINTER(aAsyncCreation);
  *aAsyncCreation = false;
  return NS_OK;
}
