'use client';

import { useState } from 'react';
import { ColorPicker } from '@/components/pastel/ColorPicker';
import { PaletteGrid } from '@/components/pastel/PaletteGrid';
import { ExportMenu } from '@/components/pastel/ExportMenu';
import { Button } from '@/components/ui/button';
import {
  Select,
  SelectContent,
  SelectItem,
  SelectTrigger,
  SelectValue,
} from '@/components/ui/select';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { AppPage } from '@/components/layout/AppPage';
import { useGeneratePalette } from '@/lib/pastel/api/queries';
import { Loader2, Palette } from 'lucide-react';
import { toast } from 'sonner';

type HarmonyType =
  | 'monochromatic'
  | 'analogous'
  | 'complementary'
  | 'split-complementary'
  | 'triadic'
  | 'tetradic';

export default function HarmonyPage() {
  const [baseColor, setBaseColor] = useState('#ff0099');
  const [harmonyType, setHarmonyType] = useState<HarmonyType>('complementary');
  const [palette, setPalette] = useState<string[]>([]);

  const paletteMutation = useGeneratePalette();

  const generateHarmony = async () => {
    try {
      const result = await paletteMutation.mutateAsync({
        base: baseColor,
        scheme: harmonyType,
      });

      // Combine primary and secondary colors into flat array
      const colors = [result.palette.primary, ...result.palette.secondary];
      setPalette(colors);
      toast.success(`Generated ${harmonyType} harmony palette`);
    } catch (error) {
      toast.error('Failed to generate harmony palette');
      console.error(error);
    }
  };

  const harmonyDescriptions: Record<HarmonyType, string> = {
    monochromatic: 'Single color with variations',
    analogous: 'Colors adjacent on the color wheel (±30°)',
    complementary: 'Colors opposite on the color wheel (180°)',
    'split-complementary': 'Base color + two colors flanking its complement',
    triadic: 'Three colors evenly spaced on the color wheel (120°)',
    tetradic: 'Four colors evenly spaced on the color wheel (90°)',
  };

  return (
    <AppPage
      title="Harmony Palette Generator"
      description="Create color harmonies based on color theory principles"
    >
      <div className="grid grid-cols-1 lg:grid-cols-2 gap-8">
          {/* Controls */}
          <div className="space-y-6">
            <Card>
              <CardHeader>
                <CardTitle>Base Color</CardTitle>
              </CardHeader>
              <CardContent>
                <ColorPicker color={baseColor} onChange={setBaseColor} />
              </CardContent>
            </Card>

            <Card>
              <CardHeader>
                <CardTitle>Harmony Type</CardTitle>
              </CardHeader>
              <CardContent className="space-y-4">
                <Select
                  value={harmonyType}
                  onValueChange={(value) => setHarmonyType(value as HarmonyType)}
                >
                  <SelectTrigger className="w-full">
                    <SelectValue placeholder="Select harmony" />
                  </SelectTrigger>
                  <SelectContent>
                    <SelectItem value="monochromatic">Monochromatic</SelectItem>
                    <SelectItem value="analogous">Analogous</SelectItem>
                    <SelectItem value="complementary">Complementary</SelectItem>
                    <SelectItem value="split-complementary">Split-Complementary</SelectItem>
                    <SelectItem value="triadic">Triadic</SelectItem>
                    <SelectItem value="tetradic">Tetradic (Square)</SelectItem>
                  </SelectContent>
                </Select>

                <p className="text-sm text-muted-foreground">
                  {harmonyDescriptions[harmonyType]}
                </p>

                <Button
                  onClick={generateHarmony}
                  disabled={paletteMutation.isPending}
                  className="w-full"
                >
                  {paletteMutation.isPending ? (
                    <>
                      <Loader2 className="mr-2 h-4 w-4 animate-spin" />
                      Generating..
                    </>
                  ) : (
                    <>
                      <Palette className="mr-2 h-4 w-4" />
                      Generate Harmony
                    </>
                  )}
                </Button>
              </CardContent>
            </Card>
          </div>

          {/* Results */}
          <div className="space-y-6">
            {palette.length > 0 && (
              <>
                <Card>
                  <CardHeader>
                    <CardTitle>
                      Generated Palette ({palette.length} colors)
                    </CardTitle>
                  </CardHeader>
                  <CardContent>
                    <PaletteGrid colors={palette} />
                  </CardContent>
                </Card>

                <Card>
                  <CardContent className="pt-6">
                    <ExportMenu colors={palette} />
                  </CardContent>
                </Card>
              </>
            )}

            {palette.length === 0 && (
              <Card>
                <CardContent className="p-12 text-center text-muted-foreground">
                  <Palette className="h-12 w-12 mx-auto mb-4 opacity-50" />
                  <p>Select a harmony type and click Generate to create your palette</p>
                </CardContent>
              </Card>
            )}
          </div>
        </div>
    </AppPage>
  );
}
