{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.AuditManager.DeleteAssessmentReport
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Deletes an assessment report in Audit Manager.
--
-- When you run the @DeleteAssessmentReport@ operation, Audit Manager
-- attempts to delete the following data:
--
-- 1.  The specified assessment report that’s stored in your S3 bucket
--
-- 2.  The associated metadata that’s stored in Audit Manager
--
-- If Audit Manager can’t access the assessment report in your S3 bucket,
-- the report isn’t deleted. In this event, the @DeleteAssessmentReport@
-- operation doesn’t fail. Instead, it proceeds to delete the associated
-- metadata only. You must then delete the assessment report from the S3
-- bucket yourself.
--
-- This scenario happens when Audit Manager receives a @403 (Forbidden)@ or
-- @404 (Not Found)@ error from Amazon S3. To avoid this, make sure that
-- your S3 bucket is available, and that you configured the correct
-- permissions for Audit Manager to delete resources in your S3 bucket. For
-- an example permissions policy that you can use, see
-- <https://docs.aws.amazon.com/audit-manager/latest/userguide/security_iam_id-based-policy-examples.html#full-administrator-access-assessment-report-destination Assessment report destination permissions>
-- in the /Audit Manager User Guide/. For information about the issues that
-- could cause a @403 (Forbidden)@ or @404 (Not Found@) error from Amazon
-- S3, see
-- <https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList List of Error Codes>
-- in the /Amazon Simple Storage Service API Reference/.
module Amazonka.AuditManager.DeleteAssessmentReport
  ( -- * Creating a Request
    DeleteAssessmentReport (..),
    newDeleteAssessmentReport,

    -- * Request Lenses
    deleteAssessmentReport_assessmentId,
    deleteAssessmentReport_assessmentReportId,

    -- * Destructuring the Response
    DeleteAssessmentReportResponse (..),
    newDeleteAssessmentReportResponse,

    -- * Response Lenses
    deleteAssessmentReportResponse_httpStatus,
  )
where

import Amazonka.AuditManager.Types
import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newDeleteAssessmentReport' smart constructor.
data DeleteAssessmentReport = DeleteAssessmentReport'
  { -- | The unique identifier for the assessment.
    DeleteAssessmentReport -> Text
assessmentId :: Prelude.Text,
    -- | The unique identifier for the assessment report.
    DeleteAssessmentReport -> Text
assessmentReportId :: Prelude.Text
  }
  deriving (DeleteAssessmentReport -> DeleteAssessmentReport -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteAssessmentReport -> DeleteAssessmentReport -> Bool
$c/= :: DeleteAssessmentReport -> DeleteAssessmentReport -> Bool
== :: DeleteAssessmentReport -> DeleteAssessmentReport -> Bool
$c== :: DeleteAssessmentReport -> DeleteAssessmentReport -> Bool
Prelude.Eq, ReadPrec [DeleteAssessmentReport]
ReadPrec DeleteAssessmentReport
Int -> ReadS DeleteAssessmentReport
ReadS [DeleteAssessmentReport]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteAssessmentReport]
$creadListPrec :: ReadPrec [DeleteAssessmentReport]
readPrec :: ReadPrec DeleteAssessmentReport
$creadPrec :: ReadPrec DeleteAssessmentReport
readList :: ReadS [DeleteAssessmentReport]
$creadList :: ReadS [DeleteAssessmentReport]
readsPrec :: Int -> ReadS DeleteAssessmentReport
$creadsPrec :: Int -> ReadS DeleteAssessmentReport
Prelude.Read, Int -> DeleteAssessmentReport -> ShowS
[DeleteAssessmentReport] -> ShowS
DeleteAssessmentReport -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteAssessmentReport] -> ShowS
$cshowList :: [DeleteAssessmentReport] -> ShowS
show :: DeleteAssessmentReport -> String
$cshow :: DeleteAssessmentReport -> String
showsPrec :: Int -> DeleteAssessmentReport -> ShowS
$cshowsPrec :: Int -> DeleteAssessmentReport -> ShowS
Prelude.Show, forall x. Rep DeleteAssessmentReport x -> DeleteAssessmentReport
forall x. DeleteAssessmentReport -> Rep DeleteAssessmentReport x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteAssessmentReport x -> DeleteAssessmentReport
$cfrom :: forall x. DeleteAssessmentReport -> Rep DeleteAssessmentReport x
Prelude.Generic)

-- |
-- Create a value of 'DeleteAssessmentReport' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'assessmentId', 'deleteAssessmentReport_assessmentId' - The unique identifier for the assessment.
--
-- 'assessmentReportId', 'deleteAssessmentReport_assessmentReportId' - The unique identifier for the assessment report.
newDeleteAssessmentReport ::
  -- | 'assessmentId'
  Prelude.Text ->
  -- | 'assessmentReportId'
  Prelude.Text ->
  DeleteAssessmentReport
newDeleteAssessmentReport :: Text -> Text -> DeleteAssessmentReport
newDeleteAssessmentReport
  Text
pAssessmentId_
  Text
pAssessmentReportId_ =
    DeleteAssessmentReport'
      { $sel:assessmentId:DeleteAssessmentReport' :: Text
assessmentId =
          Text
pAssessmentId_,
        $sel:assessmentReportId:DeleteAssessmentReport' :: Text
assessmentReportId = Text
pAssessmentReportId_
      }

-- | The unique identifier for the assessment.
deleteAssessmentReport_assessmentId :: Lens.Lens' DeleteAssessmentReport Prelude.Text
deleteAssessmentReport_assessmentId :: Lens' DeleteAssessmentReport Text
deleteAssessmentReport_assessmentId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteAssessmentReport' {Text
assessmentId :: Text
$sel:assessmentId:DeleteAssessmentReport' :: DeleteAssessmentReport -> Text
assessmentId} -> Text
assessmentId) (\s :: DeleteAssessmentReport
s@DeleteAssessmentReport' {} Text
a -> DeleteAssessmentReport
s {$sel:assessmentId:DeleteAssessmentReport' :: Text
assessmentId = Text
a} :: DeleteAssessmentReport)

-- | The unique identifier for the assessment report.
deleteAssessmentReport_assessmentReportId :: Lens.Lens' DeleteAssessmentReport Prelude.Text
deleteAssessmentReport_assessmentReportId :: Lens' DeleteAssessmentReport Text
deleteAssessmentReport_assessmentReportId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteAssessmentReport' {Text
assessmentReportId :: Text
$sel:assessmentReportId:DeleteAssessmentReport' :: DeleteAssessmentReport -> Text
assessmentReportId} -> Text
assessmentReportId) (\s :: DeleteAssessmentReport
s@DeleteAssessmentReport' {} Text
a -> DeleteAssessmentReport
s {$sel:assessmentReportId:DeleteAssessmentReport' :: Text
assessmentReportId = Text
a} :: DeleteAssessmentReport)

instance Core.AWSRequest DeleteAssessmentReport where
  type
    AWSResponse DeleteAssessmentReport =
      DeleteAssessmentReportResponse
  request :: (Service -> Service)
-> DeleteAssessmentReport -> Request DeleteAssessmentReport
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.delete (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DeleteAssessmentReport
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DeleteAssessmentReport)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> DeleteAssessmentReportResponse
DeleteAssessmentReportResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable DeleteAssessmentReport where
  hashWithSalt :: Int -> DeleteAssessmentReport -> Int
hashWithSalt Int
_salt DeleteAssessmentReport' {Text
assessmentReportId :: Text
assessmentId :: Text
$sel:assessmentReportId:DeleteAssessmentReport' :: DeleteAssessmentReport -> Text
$sel:assessmentId:DeleteAssessmentReport' :: DeleteAssessmentReport -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assessmentId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assessmentReportId

instance Prelude.NFData DeleteAssessmentReport where
  rnf :: DeleteAssessmentReport -> ()
rnf DeleteAssessmentReport' {Text
assessmentReportId :: Text
assessmentId :: Text
$sel:assessmentReportId:DeleteAssessmentReport' :: DeleteAssessmentReport -> Text
$sel:assessmentId:DeleteAssessmentReport' :: DeleteAssessmentReport -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
assessmentId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assessmentReportId

instance Data.ToHeaders DeleteAssessmentReport where
  toHeaders :: DeleteAssessmentReport -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToPath DeleteAssessmentReport where
  toPath :: DeleteAssessmentReport -> ByteString
toPath DeleteAssessmentReport' {Text
assessmentReportId :: Text
assessmentId :: Text
$sel:assessmentReportId:DeleteAssessmentReport' :: DeleteAssessmentReport -> Text
$sel:assessmentId:DeleteAssessmentReport' :: DeleteAssessmentReport -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/assessments/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
assessmentId,
        ByteString
"/reports/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
assessmentReportId
      ]

instance Data.ToQuery DeleteAssessmentReport where
  toQuery :: DeleteAssessmentReport -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newDeleteAssessmentReportResponse' smart constructor.
data DeleteAssessmentReportResponse = DeleteAssessmentReportResponse'
  { -- | The response's http status code.
    DeleteAssessmentReportResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DeleteAssessmentReportResponse
-> DeleteAssessmentReportResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteAssessmentReportResponse
-> DeleteAssessmentReportResponse -> Bool
$c/= :: DeleteAssessmentReportResponse
-> DeleteAssessmentReportResponse -> Bool
== :: DeleteAssessmentReportResponse
-> DeleteAssessmentReportResponse -> Bool
$c== :: DeleteAssessmentReportResponse
-> DeleteAssessmentReportResponse -> Bool
Prelude.Eq, ReadPrec [DeleteAssessmentReportResponse]
ReadPrec DeleteAssessmentReportResponse
Int -> ReadS DeleteAssessmentReportResponse
ReadS [DeleteAssessmentReportResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteAssessmentReportResponse]
$creadListPrec :: ReadPrec [DeleteAssessmentReportResponse]
readPrec :: ReadPrec DeleteAssessmentReportResponse
$creadPrec :: ReadPrec DeleteAssessmentReportResponse
readList :: ReadS [DeleteAssessmentReportResponse]
$creadList :: ReadS [DeleteAssessmentReportResponse]
readsPrec :: Int -> ReadS DeleteAssessmentReportResponse
$creadsPrec :: Int -> ReadS DeleteAssessmentReportResponse
Prelude.Read, Int -> DeleteAssessmentReportResponse -> ShowS
[DeleteAssessmentReportResponse] -> ShowS
DeleteAssessmentReportResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteAssessmentReportResponse] -> ShowS
$cshowList :: [DeleteAssessmentReportResponse] -> ShowS
show :: DeleteAssessmentReportResponse -> String
$cshow :: DeleteAssessmentReportResponse -> String
showsPrec :: Int -> DeleteAssessmentReportResponse -> ShowS
$cshowsPrec :: Int -> DeleteAssessmentReportResponse -> ShowS
Prelude.Show, forall x.
Rep DeleteAssessmentReportResponse x
-> DeleteAssessmentReportResponse
forall x.
DeleteAssessmentReportResponse
-> Rep DeleteAssessmentReportResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeleteAssessmentReportResponse x
-> DeleteAssessmentReportResponse
$cfrom :: forall x.
DeleteAssessmentReportResponse
-> Rep DeleteAssessmentReportResponse x
Prelude.Generic)

-- |
-- Create a value of 'DeleteAssessmentReportResponse' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'httpStatus', 'deleteAssessmentReportResponse_httpStatus' - The response's http status code.
newDeleteAssessmentReportResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteAssessmentReportResponse
newDeleteAssessmentReportResponse :: Int -> DeleteAssessmentReportResponse
newDeleteAssessmentReportResponse Int
pHttpStatus_ =
  DeleteAssessmentReportResponse'
    { $sel:httpStatus:DeleteAssessmentReportResponse' :: Int
httpStatus =
        Int
pHttpStatus_
    }

-- | The response's http status code.
deleteAssessmentReportResponse_httpStatus :: Lens.Lens' DeleteAssessmentReportResponse Prelude.Int
deleteAssessmentReportResponse_httpStatus :: Lens' DeleteAssessmentReportResponse Int
deleteAssessmentReportResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteAssessmentReportResponse' {Int
httpStatus :: Int
$sel:httpStatus:DeleteAssessmentReportResponse' :: DeleteAssessmentReportResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DeleteAssessmentReportResponse
s@DeleteAssessmentReportResponse' {} Int
a -> DeleteAssessmentReportResponse
s {$sel:httpStatus:DeleteAssessmentReportResponse' :: Int
httpStatus = Int
a} :: DeleteAssessmentReportResponse)

instance
  Prelude.NFData
    DeleteAssessmentReportResponse
  where
  rnf :: DeleteAssessmentReportResponse -> ()
rnf DeleteAssessmentReportResponse' {Int
httpStatus :: Int
$sel:httpStatus:DeleteAssessmentReportResponse' :: DeleteAssessmentReportResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus