-- Update auto_create_entity_version to log suspicious versions without user attribution
CREATE OR REPLACE FUNCTION public.auto_create_entity_version()
RETURNS TRIGGER
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public
AS $$
DECLARE
  v_entity_type TEXT;
  v_change_type version_change_type;
  v_user_id UUID;
  v_version_data JSONB;
BEGIN
  -- Determine entity type from table name
  v_entity_type := CASE TG_TABLE_NAME
    WHEN 'parks' THEN 'park'
    WHEN 'rides' THEN 'ride'
    WHEN 'companies' THEN 'company'
    WHEN 'ride_models' THEN 'ride_model'
    WHEN 'photos' THEN 'photo'
    ELSE substring(TG_TABLE_NAME from 1 for length(TG_TABLE_NAME) - 1)
  END;

  -- Determine change type
  v_change_type := CASE TG_OP
    WHEN 'INSERT' THEN 'created'::version_change_type
    WHEN 'UPDATE' THEN 'updated'::version_change_type
    ELSE 'updated'::version_change_type
  END;

  -- Get user from session or auth context
  BEGIN
    v_user_id := current_setting('app.current_user_id', true)::UUID;
  EXCEPTION WHEN OTHERS THEN
    v_user_id := auth.uid();
  END;

  -- Convert NEW record to JSONB
  v_version_data := to_jsonb(NEW);

  -- Create version (only if we have a user context)
  IF v_user_id IS NOT NULL THEN
    PERFORM public.create_entity_version(
      v_entity_type,
      NEW.id,
      v_version_data,
      v_user_id,
      CASE TG_OP
        WHEN 'INSERT' THEN 'Entity created'
        WHEN 'UPDATE' THEN 'Entity updated'
        ELSE 'Entity modified'
      END,
      NULL,
      v_change_type
    );
  ELSE
    -- Log suspicious version without user (audit trail)
    INSERT INTO public.admin_audit_log (
      action,
      details,
      created_at
    ) VALUES (
      'version_without_user',
      jsonb_build_object(
        'entity_type', v_entity_type,
        'entity_id', NEW.id,
        'table', TG_TABLE_NAME,
        'operation', TG_OP,
        'timestamp', NOW()
      ),
      NOW()
    );
  END IF;

  RETURN NEW;
END;
$$;