"use client";

import { type User } from "@/lib/api";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import {
  Dialog,
  DialogContent,
  DialogDescription,
  DialogFooter,
  DialogHeader,
  DialogTitle,
} from "@/components/ui/dialog";

interface ResetPasswordDialogProps {
  open: boolean;
  onClose: () => void;
  value: string;
  setValue: (v: string) => void;
  error: string;
  loading: boolean;
  onSubmit: (e: React.FormEvent) => void;
}

export function ResetPasswordDialog({
  open,
  onClose,
  value,
  setValue,
  error,
  loading,
  onSubmit,
}: ResetPasswordDialogProps) {
  return (
    <Dialog open={open} onOpenChange={(o) => { if (!o) onClose(); }}>
      <DialogContent>
        <DialogHeader>
          <DialogTitle>Passwort zurücksetzen</DialogTitle>
          <DialogDescription>
            Neues Passwort für den Benutzer festlegen.
          </DialogDescription>
        </DialogHeader>
        <form onSubmit={onSubmit} className="space-y-4">
          <div className="space-y-2">
            <Label htmlFor="new-password">Neues Passwort</Label>
            <Input
              id="new-password"
              type="password"
              value={value}
              onChange={(e) => setValue(e.target.value)}
              required
              minLength={8}
              placeholder="Mindestens 8 Zeichen"
            />
          </div>
          {error && (
            <p className="text-sm text-destructive">{error}</p>
          )}
          <DialogFooter>
            <Button type="button" variant="outline" onClick={onClose}>
              Abbrechen
            </Button>
            <Button type="submit" disabled={loading}>
              {loading ? "Speichern..." : "Speichern"}
            </Button>
          </DialogFooter>
        </form>
      </DialogContent>
    </Dialog>
  );
}

interface DeleteUserDialogProps {
  user: User | null;
  onClose: () => void;
  deleteActionLoading: "deactivate" | "delete" | null;
  deleteDialogError: string;
  onDeactivate: () => void;
  onDelete: () => void;
}

export function DeleteUserDialog({
  user,
  onClose,
  deleteActionLoading,
  deleteDialogError,
  onDeactivate,
  onDelete,
}: DeleteUserDialogProps) {
  return (
    <Dialog open={user !== null} onOpenChange={(open) => { if (!open) onClose(); }}>
      <DialogContent>
        <DialogHeader>
          <DialogTitle>Benutzer entfernen</DialogTitle>
          <DialogDescription>
            Was soll mit dem Konto <strong>{user?.username}</strong> passieren?
          </DialogDescription>
        </DialogHeader>

        <div className="rounded-md border border-yellow-300 bg-yellow-50 p-3 text-sm text-yellow-800">
          <strong>Hinweis (GoBD):</strong> E-Mails bleiben unabhängig von dieser Aktion im Archiv erhalten. Die gesetzliche Aufbewahrungspflicht besteht auch nach Ausscheiden des Mitarbeiters.
        </div>

        <div className="space-y-3">
          <div className="rounded-md border p-3">
            <p className="font-medium text-sm">Konto deaktivieren (empfohlen)</p>
            <p className="text-xs text-muted-foreground mt-1">
              Login wird gesperrt. Konto und IMAP-Verbindungen bleiben erhalten und können reaktiviert werden.
            </p>
          </div>
          <div className="rounded-md border border-destructive/30 p-3">
            <p className="font-medium text-sm text-destructive">Konto endgültig löschen</p>
            <p className="text-xs text-muted-foreground mt-1">
              Account und alle IMAP-Verbindungen werden dauerhaft entfernt. Nicht rückgängig zu machen.
            </p>
          </div>
        </div>

        {deleteDialogError && (
          <p className="text-sm text-destructive">{deleteDialogError}</p>
        )}

        <DialogFooter className="flex-col gap-2 sm:flex-row">
          <Button variant="outline" onClick={onClose} disabled={deleteActionLoading !== null}>
            Abbrechen
          </Button>
          <Button
            variant="outline"
            onClick={onDeactivate}
            disabled={deleteActionLoading !== null || user?.active === false}
          >
            {deleteActionLoading === "deactivate" ? "Wird deaktiviert..." : "Deaktivieren"}
          </Button>
          <Button
            variant="destructive"
            onClick={onDelete}
            disabled={deleteActionLoading !== null}
          >
            {deleteActionLoading === "delete" ? "Wird gelöscht..." : "Endgültig löschen"}
          </Button>
        </DialogFooter>
      </DialogContent>
    </Dialog>
  );
}
