/**
 * ANNOTATED COPY — every line explained
 * Source: src/store/auth.ts
 * NOT used by the app — read this to learn how the real file works
 */
// Zustand — simple global state store (cart, auth, locale)
import { create } from 'zustand';
// Zustand — simple global state store (cart, auth, locale)
import { persist } from 'zustand/middleware';
// Import project module (@/ alias = src/ folder in tsconfig)
import { Address, Order, User } from '@/types';
// Import project module (@/ alias = src/ folder in tsconfig)
import { DEMO_EMAIL } from '@/lib/constants';
// Import project module (@/ alias = src/ folder in tsconfig)
import { DEMO_ORDERS } from '@/lib/demo-orders';
// (blank line — separates logical blocks for readability)
// TypeScript interface — contract for object properties and methods
interface AuthState {
  // Line 8: user: User | null;
  user: User | null;
  // Line 9: orders: Order[];
  orders: Order[];
  // Line 10: isAuthenticated: boolean;
  isAuthenticated: boolean;
  // Line 11: login: (email: string, password: string) => boolean;
  login: (email: string, password: string) => boolean;
  // Line 12: register: (data: {
  register: (data: {
    // Line 13: name: string;
    name: string;
    // Line 14: email: string;
    email: string;
    // Line 15: password: string;
    password: string;
    // Line 16: phone: string;
    phone: string;
    // Line 17: address: Address;
    address: Address;
  // Closing brace — end of block (function, if, object, JSX)
  }) => boolean;
  // Line 19: logout: () => void;
  logout: () => void;
  // Line 20: updateProfile: (data: Partial<User>) => void;
  updateProfile: (data: Partial<User>) => void;
  // Line 21: addOrder: (order: Order) => void;
  addOrder: (order: Order) => void;
// Closing brace — end of block (function, if, object, JSX)
}
// (blank line — separates logical blocks for readability)
// Line 24: const DEMO_USER: User = {
const DEMO_USER: User = {
  // Property or array item — trailing comma allowed in TypeScript
  id: 'demo-1',
  // Property or array item — trailing comma allowed in TypeScript
  name: 'Ahmed Khan',
  // Property or array item — trailing comma allowed in TypeScript
  email: DEMO_EMAIL,
  // Property or array item — trailing comma allowed in TypeScript
  phone: '+46 72 585 50 50',
  // Line 29: address: {
  address: {
    // Property or array item — trailing comma allowed in TypeScript
    street: 'Tingvallavägen 11',
    // Property or array item — trailing comma allowed in TypeScript
    city: 'Märsta',
    // Property or array item — trailing comma allowed in TypeScript
    state: 'Stockholm',
    // Property or array item — trailing comma allowed in TypeScript
    zip: '195 31',
  // Closing brace — end of block (function, if, object, JSX)
  },
  // Property or array item — trailing comma allowed in TypeScript
  createdAt: '2025-03-15T10:00:00.000Z',
// Closing brace — end of block (function, if, object, JSX)
};
// (blank line — separates logical blocks for readability)
// Named export constant — shared config/data imported elsewhere
export const useAuthStore = create<AuthState>()(
  // Zustand persist — save store to localStorage between visits
  persist(
    // Line 40: (set, get) => ({
    (set, get) => ({
      // Property or array item — trailing comma allowed in TypeScript
      user: null,
      // Property or array item — trailing comma allowed in TypeScript
      orders: [],
      // Property or array item — trailing comma allowed in TypeScript
      isAuthenticated: false,
// (blank line — separates logical blocks for readability)
      // Line 45: login: (email, password) => {
      login: (email, password) => {
        // Conditional branch — different behavior based on runtime value
        if (email === DEMO_EMAIL && password === 'demo123') {
          // Line 47: const existingOrders = get().orders;
          const existingOrders = get().orders;
          // Line 48: set({
          set({
            // Property or array item — trailing comma allowed in TypeScript
            user: DEMO_USER,
            // Property or array item — trailing comma allowed in TypeScript
            isAuthenticated: true,
            // Property or array item — trailing comma allowed in TypeScript
            orders: existingOrders.length > 0 ? existingOrders : DEMO_ORDERS,
          // Closing brace — end of block (function, if, object, JSX)
          });
          // Return value from function
          return true;
        // Closing brace — end of block (function, if, object, JSX)
        }
        // Line 55: const stored = get().user;
        const stored = get().user;
        // Conditional branch — different behavior based on runtime value
        if (stored && stored.email === email) {
          // Line 57: set({ isAuthenticated: true });
          set({ isAuthenticated: true });
          // Return value from function
          return true;
        // Closing brace — end of block (function, if, object, JSX)
        }
        // Return value from function
        return false;
      // Closing brace — end of block (function, if, object, JSX)
      },
// (blank line — separates logical blocks for readability)
      // Line 63: register: (data) => {
      register: (data) => {
        // Line 64: const user: User = {
        const user: User = {
          // Property or array item — trailing comma allowed in TypeScript
          id: `user-${Date.now()}`,
          // Property or array item — trailing comma allowed in TypeScript
          name: data.name,
          // Property or array item — trailing comma allowed in TypeScript
          email: data.email,
          // Property or array item — trailing comma allowed in TypeScript
          phone: data.phone,
          // Property or array item — trailing comma allowed in TypeScript
          address: data.address,
          // Property or array item — trailing comma allowed in TypeScript
          createdAt: new Date().toISOString(),
        // Closing brace — end of block (function, if, object, JSX)
        };
        // Line 72: set({ user, isAuthenticated: true });
        set({ user, isAuthenticated: true });
        // Return value from function
        return true;
      // Closing brace — end of block (function, if, object, JSX)
      },
// (blank line — separates logical blocks for readability)
      // Property or array item — trailing comma allowed in TypeScript
      logout: () => set({ isAuthenticated: false }),
// (blank line — separates logical blocks for readability)
      // Line 78: updateProfile: (data) => {
      updateProfile: (data) => {
        // Line 79: const current = get().user;
        const current = get().user;
        // Conditional branch — different behavior based on runtime value
        if (current) {
          // Line 81: set({ user: { ...current, ...data } });
          set({ user: { ...current, ...data } });
        // Closing brace — end of block (function, if, object, JSX)
        }
      // Closing brace — end of block (function, if, object, JSX)
      },
// (blank line — separates logical blocks for readability)
      // Line 85: addOrder: (order) => {
      addOrder: (order) => {
        // Line 86: set({ orders: [order, ...get().orders] });
        set({ orders: [order, ...get().orders] });
      // Closing brace — end of block (function, if, object, JSX)
      },
    // Closing brace — end of block (function, if, object, JSX)
    }),
    // Line 89: { name: 'kott-gard-auth' }
    { name: 'kott-gard-auth' }
  // Line 90: )
  )
// Line 91: );
);
