import type {
  EditNachhilfeangebotById,
  UpdateNachhilfeangebotInput,
  UpdateNachhilfeangebotMutationVariables,
} from 'types/graphql'

import { navigate, routes } from '@redwoodjs/router'
import type {
  CellSuccessProps,
  CellFailureProps,
  TypedDocumentNode,
} from '@redwoodjs/web'
import { useMutation } from '@redwoodjs/web'
import { toast } from '@redwoodjs/web/toast'

import NachhilfeangebotForm from 'src/components/Nachhilfeangebot/NachhilfeangebotForm'

export const QUERY: TypedDocumentNode<EditNachhilfeangebotById> = gql`
  query EditNachhilfeangebotById($id: Int!) {
    nachhilfeangebot: nachhilfeangebot(id: $id) {
      id
      subject
      currentClass
      cost
    }
  }
`

const UPDATE_NACHHILFEANGEBOT_MUTATION: TypedDocumentNode<
  EditNachhilfeangebotById,
  UpdateNachhilfeangebotMutationVariables
> = gql`
  mutation UpdateNachhilfeangebotMutation(
    $id: Int!
    $input: UpdateNachhilfeangebotInput!
  ) {
    updateNachhilfeangebot(id: $id, input: $input) {
      id
      subject
      currentClass
      cost
    }
  }
`

export const Loading = () => <div>Loading...</div>

export const Failure = ({ error }: CellFailureProps) => (
  <div className="rw-cell-error">{error?.message}</div>
)

export const Success = ({
  nachhilfeangebot,
}: CellSuccessProps<EditNachhilfeangebotById>) => {
  const [updateNachhilfeangebot, { loading, error }] = useMutation(
    UPDATE_NACHHILFEANGEBOT_MUTATION,
    {
      onCompleted: () => {
        toast.success('Nachhilfeangebot updated')
        navigate(routes.nachhilfeangebots())
      },
      onError: (error) => {
        toast.error(error.message)
      },
    }
  )

  const onSave = (
    input: UpdateNachhilfeangebotInput,
    id: EditNachhilfeangebotById['nachhilfeangebot']['id']
  ) => {
    updateNachhilfeangebot({ variables: { id, input } })
  }

  return (
    <div className="rw-segment">
      <header className="rw-segment-header">
        <h2 className="rw-heading rw-heading-secondary">
          Edit Nachhilfeangebot {nachhilfeangebot?.id}
        </h2>
      </header>
      <div className="rw-segment-main">
        <NachhilfeangebotForm
          nachhilfeangebot={nachhilfeangebot}
          onSave={onSave}
          error={error}
          loading={loading}
        />
      </div>
    </div>
  )
}
