"use client"

import * as React from "react"
import * as CollapsiblePrimitive from "@radix-ui/react-collapsible"
import { cva, type VariantProps } from "class-variance-authority"
import { ChevronDown } from "lucide-react"

import { cn } from "../../lib/utils"

/**
 * Collapsible (Daraltılabilir) Bileşeni
 * 
 * İçeriği genişletilip daraltılabilen hafif bir bileşendir.
 * Tema sistemiyle tam entegre, erişilebilir ve özelleştirilebilir.
 */

const MoonUICollapsiblePro = CollapsiblePrimitive.Root

const MoonUIcollapsibleTriggerVariantsPro = cva(
  "flex w-full items-center justify-between transition-all",
  {
    variants: {
      variant: {
        default: "text-foreground hover:text-primary",
        ghost: "text-foreground hover:bg-accent/10 rounded",
        outline: "text-foreground border border-border rounded-t-md hover:bg-accent/5",
      },
      size: {
        sm: "text-xs py-2 px-3",
        default: "text-sm py-3 px-4",
        md: "text-base py-4 px-4",
        lg: "text-lg py-5 px-5",
      },
    },
    defaultVariants: {
      variant: "default",
      size: "default",
    },
  }
)

interface CollapsibleTriggerProps 
  extends React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Trigger>,
    VariantProps<typeof MoonUIcollapsibleTriggerVariantsPro> {}

const MoonUICollapsibleTriggerPro = React.forwardRef<
  React.ElementRef<typeof CollapsiblePrimitive.Trigger>,
  CollapsibleTriggerProps
>(({ className, children, variant, size, asChild, ...props }, ref) => {
  // asChild kullanıldığında otomatik ikon eklemeyi atla
  if (asChild) {
    return (
      <CollapsiblePrimitive.Trigger
        ref={ref}
        className={cn(MoonUIcollapsibleTriggerVariantsPro({ variant, size }), className)}
        asChild={asChild}
        {...props}
      >
        {children}
      </CollapsiblePrimitive.Trigger>
    )
  }

  return (
    <CollapsiblePrimitive.Trigger
      ref={ref}
      className={cn(MoonUIcollapsibleTriggerVariantsPro({ variant, size }), className)}
      {...props}
    >
      {children}
      <ChevronDown className="h-4 w-4 shrink-0 ml-auto transition-transform duration-200 [&[data-state=open]]:rotate-180" />
    </CollapsiblePrimitive.Trigger>
  )
})
MoonUICollapsibleTriggerPro.displayName = CollapsiblePrimitive.Trigger.displayName

const MoonUIcollapsibleContentVariantsPro = cva(
  "overflow-hidden transition-all data-[state=closed]:animate-collapse-up data-[state=open]:animate-collapse-down",
  {
    variants: {
      variant: {
        default: "text-muted-foreground",
        ghost: "text-muted-foreground rounded-b",
        outline: "text-muted-foreground border border-t-0 border-border rounded-b-md",
      },
      size: {
        sm: "text-xs",
        default: "text-sm",
        md: "text-base",
        lg: "text-lg",
      },
    },
    defaultVariants: {
      variant: "default",
      size: "default",
    },
  }
)

interface CollapsibleContentProps 
  extends React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Content>,
    VariantProps<typeof MoonUIcollapsibleContentVariantsPro> {}

const MoonUICollapsibleContentPro = React.forwardRef<
  React.ElementRef<typeof CollapsiblePrimitive.Content>,
  CollapsibleContentProps
>(({ className, children, variant, size, ...props }, ref) => (
  <CollapsiblePrimitive.Content
    ref={ref}
    className={cn(MoonUIcollapsibleContentVariantsPro({ variant, size }), className)}
    {...props}
  >
    <div className="p-4">{children}</div>
  </CollapsiblePrimitive.Content>
))
MoonUICollapsibleContentPro.displayName = CollapsiblePrimitive.Content.displayName


// Internal aliases for Pro component usage
export const CollapsibleInternal = MoonUICollapsiblePro
export const collapsibleTriggerVariantsInternal = MoonUIcollapsibleTriggerVariantsPro
export const CollapsibleTriggerInternal = MoonUICollapsibleTriggerPro
export const collapsibleContentVariantsInternal = MoonUIcollapsibleContentVariantsPro
export const CollapsibleContentInternal = MoonUICollapsibleContentPro

// Pro exports  
export { MoonUICollapsiblePro, MoonUIcollapsibleTriggerVariantsPro, MoonUICollapsibleTriggerPro, MoonUIcollapsibleContentVariantsPro, MoonUICollapsibleContentPro }

// Clean exports (without MoonUI prefix for easier usage)
export { MoonUICollapsiblePro as Collapsible, MoonUIcollapsibleTriggerVariantsPro as collapsibleTriggerVariants, MoonUICollapsibleTriggerPro as CollapsibleTrigger, MoonUIcollapsibleContentVariantsPro as collapsibleContentVariants, MoonUICollapsibleContentPro as CollapsibleContent }

export type {
  CollapsibleTriggerProps,
  CollapsibleContentProps
}
