import { AlertTriangle, Loader2 } from 'lucide-react';
import { toast } from 'sonner';

import { Head, useForm } from '@inertiajs/react';

import EditorialPageHeader from '@/Components/layout/EditorialPageHeader';
import { TimezoneSelector } from '@/Components/settings/TimezoneSelector';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/Components/ui/card';
import { Label } from '@/Components/ui/label';
import {
  Select,
  SelectContent,
  SelectItem,
  SelectTrigger,
  SelectValue,
} from '@/Components/ui/select';
import { useTimezone } from '@/hooks/useTimezone';
import DashboardLayout from '@/Layouts/DashboardLayout';
import { couldnt } from '@/lib/messages';

import DeleteUserForm from './Partials/DeleteUserForm';
import UpdatePasswordForm from './Partials/UpdatePasswordForm';
import UpdateProfileInformationForm from './Partials/UpdateProfileInformationForm';

interface EditProps {
  mustVerifyEmail: boolean;
  status?: string;
  timezone?: string;
  email_frequency_preference?: string;
}

export default function Edit({
  mustVerifyEmail,
  status,
  timezone: initialTimezone,
  email_frequency_preference: initialFrequency,
}: EditProps) {
  const {
    timezone,
    setTimezone: saveTimezone,
    isSaving,
  } = useTimezone({
    initialTimezone,
  });

  const {
    data: frequencyData,
    setData: setFrequencyData,
    patch: patchFrequency,
    processing: savingFrequency,
  } = useForm({
    email_frequency_preference: initialFrequency || 'weekly',
  });

  const handleTimezoneChange = async (newTimezone: string) => {
    const success = await saveTimezone(newTimezone);
    if (success) {
      toast.success('Timezone updated.');
    } else {
      toast.error(couldnt('update', 'timezone'));
    }
  };

  const handleFrequencyChange = (value: string) => {
    setFrequencyData('email_frequency_preference', value);
    patchFrequency(route('profile.update'), {
      onSuccess: () => {
        toast.success('Email frequency preference updated.');
      },
      onError: () => {
        toast.error(couldnt('update', 'preference'));
      },
    });
  };

  return (
    <DashboardLayout>
      <Head title="Profile" />
      <EditorialPageHeader title="Profile" subtitle="Manage your account details and security settings" />
      <div className="container py-8">
        <div className="max-w-3xl mx-auto space-y-6">
          <Card>
            <CardHeader>
              <CardTitle>Profile Information</CardTitle>
              <CardDescription>Update your name, email, and account details.</CardDescription>
            </CardHeader>
            <CardContent>
              <UpdateProfileInformationForm
                _mustVerifyEmail={mustVerifyEmail}
                status={status}
                timezone={initialTimezone}
                className="max-w-xl"
              />
            </CardContent>
          </Card>

          <Card>
            <CardHeader>
              <CardTitle>Preferences</CardTitle>
              <CardDescription>
                Customize your display, regional, and email notification settings.
              </CardDescription>
            </CardHeader>
            <CardContent>
              <div className="max-w-xl space-y-6">
                <div className="space-y-2">
                  <Label htmlFor="timezone">Timezone</Label>
                  <p className="text-sm text-muted-foreground">
                    All dates and times will be displayed in your selected timezone.
                  </p>
                  <div className="flex items-center gap-3">
                    <TimezoneSelector
                      value={timezone}
                      onChange={handleTimezoneChange}
                      disabled={isSaving}
                    />
                    {isSaving && (
                      <div className="flex items-center gap-2 text-muted-foreground">
                        <Loader2 className="size-4 animate-spin" />
                        <span className="text-sm">Saving...</span>
                      </div>
                    )}
                  </div>
                </div>

                <hr className="border-t" />

                <div className="space-y-2">
                  <Label htmlFor="email-frequency">Email Notification Frequency</Label>
                  <p className="text-sm text-muted-foreground">
                    Control how often you receive general lifecycle email notifications (onboarding
                    tips, re-engagement, feature updates, milestones). Site-specific digest settings
                    are configured separately.
                  </p>
                  <Select
                    value={frequencyData.email_frequency_preference}
                    onValueChange={handleFrequencyChange}
                    disabled={savingFrequency}
                  >
                    <SelectTrigger id="email-frequency" className="w-full">
                      <SelectValue placeholder="Select frequency" />
                    </SelectTrigger>
                    <SelectContent>
                      <SelectItem value="daily">Daily - Every morning at 9:00 AM</SelectItem>
                      <SelectItem value="weekly">Weekly - Every Monday at 9:00 AM</SelectItem>
                      <SelectItem value="disabled">Disabled - No lifecycle emails</SelectItem>
                    </SelectContent>
                  </Select>
                  {savingFrequency && (
                    <div className="flex items-center gap-2 text-muted-foreground">
                      <Loader2 className="size-4 animate-spin" />
                      <span className="text-sm">Saving...</span>
                    </div>
                  )}
                </div>
              </div>
            </CardContent>
          </Card>

          <Card>
            <CardHeader>
              <CardTitle>Update Password</CardTitle>
              <CardDescription>Use a strong password to keep your account secure.</CardDescription>
            </CardHeader>
            <CardContent>
              <UpdatePasswordForm className="max-w-xl" />
            </CardContent>
          </Card>

          <Card id="danger-zone" className="border-destructive/50 bg-destructive/5">
            <CardHeader>
              <div className="flex items-center gap-2">
                <div className="rounded-full bg-destructive/10 p-2">
                  <AlertTriangle className="size-5 text-destructive" />
                </div>
                <div>
                  <CardTitle className="text-destructive">Danger Zone</CardTitle>
                  <CardDescription>
                    Irreversible actions that will permanently affect your account.
                  </CardDescription>
                </div>
              </div>
            </CardHeader>
            <CardContent className="space-y-4">
              <div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 p-4 rounded-lg border border-destructive/30 bg-background">
                <div>
                  <p className="font-medium">Delete Account</p>
                  <p className="text-sm text-muted-foreground">
                    Permanently delete your account and all data. This cannot be undone.
                  </p>
                </div>
                <div className="shrink-0">
                  <DeleteUserForm />
                </div>
              </div>
            </CardContent>
          </Card>
        </div>
      </div>
    </DashboardLayout>
  );
}
