import type { OutfitSlot } from './types';

// Outfit vocabulary. Types/colours the generator draws from and dress-code rules
// predicate on. Slot taxonomy cross-checked against the 90sDJsim wardrobe catalog
// (docs/ASSETS.md §1) so a future art pass maps 1:1.

export interface OutfitTypeDef {
  type: string;
  weight: number;
  colours: readonly string[];
  canLogo?: boolean;
  canVintage?: boolean;
}

export const PALETTE: Record<string, number> = {
  white: 0xf2f2f2,
  black: 0x14141c,
  grey: 0x8a8a94,
  navy: 0x1e2a52,
  red: 0xc03434,
  green: 0x2e7d46,
  blue: 0x3465c0,
  pink: 0xe06fa4,
  purple: 0x7a4fc0,
  yellow: 0xd8c23a,
  orange: 0xd07c2e,
  brown: 0x6e4a2e,
  cream: 0xe8ddc0,
  denim: 0x4a6a95,
};

export const OUTFIT_VOCAB: Record<OutfitSlot, readonly OutfitTypeDef[]> = {
  shoes: [
    { type: 'sneaker', weight: 5, colours: ['white', 'black', 'red', 'grey'], canLogo: true, canVintage: true },
    { type: 'boot', weight: 2, colours: ['black', 'brown'] },
    { type: 'dress', weight: 2, colours: ['black', 'brown'] },
    { type: 'heel', weight: 2, colours: ['black', 'red', 'pink', 'white'] },
    { type: 'thong', weight: 1, colours: ['black', 'blue', 'yellow'] }, // the footwear, obviously
    { type: 'loafer', weight: 1, colours: ['brown', 'black', 'cream'] },
    { type: 'platform', weight: 1, colours: ['black', 'purple', 'pink'], canVintage: true },
  ],
  legs: [
    { type: 'jeans', weight: 5, colours: ['denim', 'black', 'grey'] },
    { type: 'chinos', weight: 3, colours: ['cream', 'navy', 'brown'] },
    { type: 'skirt', weight: 3, colours: ['black', 'red', 'denim', 'pink'] },
    { type: 'trackies', weight: 2, colours: ['grey', 'black', 'navy'], canLogo: true },
    { type: 'shorts', weight: 2, colours: ['denim', 'cream', 'black'] },
    { type: 'slacks', weight: 2, colours: ['black', 'grey', 'navy'] },
    { type: 'cargo', weight: 1, colours: ['green', 'grey', 'brown'] },
  ],
  top: [
    { type: 'tee', weight: 5, colours: ['white', 'black', 'grey', 'red', 'green', 'navy'], canLogo: true, canVintage: true },
    { type: 'shirt', weight: 4, colours: ['white', 'blue', 'pink', 'cream'] },
    { type: 'singlet', weight: 2, colours: ['white', 'black', 'grey'], canLogo: true },
    { type: 'polo', weight: 2, colours: ['navy', 'white', 'green', 'red'], canLogo: true },
    { type: 'crop', weight: 2, colours: ['white', 'black', 'pink', 'purple'] },
    { type: 'dressShirt', weight: 2, colours: ['white', 'black'] },
    { type: 'jersey', weight: 1, colours: ['red', 'blue', 'yellow'], canLogo: true, canVintage: true },
  ],
  outer: [
    { type: 'none', weight: 6, colours: ['black'] },
    { type: 'blazer', weight: 1, colours: ['black', 'navy', 'grey'] },
    { type: 'bomber', weight: 2, colours: ['black', 'green', 'navy'], canLogo: true, canVintage: true },
    { type: 'hoodie', weight: 2, colours: ['black', 'grey', 'red'], canLogo: true },
    { type: 'leather', weight: 1, colours: ['black', 'brown'], canVintage: true },
    { type: 'puffer', weight: 1, colours: ['black', 'orange', 'purple'], canLogo: true },
  ],
  hair: [
    { type: 'short', weight: 5, colours: ['black', 'brown', 'yellow', 'grey'] },
    { type: 'long', weight: 3, colours: ['black', 'brown', 'yellow', 'red'] },
    { type: 'bun', weight: 2, colours: ['black', 'brown', 'yellow'] },
    { type: 'mullet', weight: 2, colours: ['brown', 'yellow', 'black'], canVintage: true },
    { type: 'shaved', weight: 2, colours: ['black', 'brown'] },
    { type: 'dyed', weight: 1, colours: ['pink', 'green', 'purple', 'blue'] },
  ],
  accessory: [
    { type: 'none', weight: 6, colours: ['black'] },
    { type: 'bucketHat', weight: 1, colours: ['cream', 'black', 'green'], canLogo: true, canVintage: true },
    { type: 'cap', weight: 2, colours: ['black', 'red', 'navy'], canLogo: true },
    { type: 'sunnies', weight: 1, colours: ['black'] }, // sunglasses. at night. a tell in itself
    { type: 'bumbag', weight: 1, colours: ['black', 'purple', 'yellow'], canLogo: true, canVintage: true },
    { type: 'chain', weight: 1, colours: ['yellow', 'grey'] },
  ],
};
