import { Appointment, Business, Resource, User, Metric, Customer, PlatformMetric, Ticket, Blocker, Service } from './types';

export const CURRENT_BUSINESS: Business = {
  id: 'b1',
  name: 'Acme Auto Repair',
  subdomain: 'acme-auto',
  primaryColor: '#3B82F6', // Blue-500
  secondaryColor: '#10B981', // Emerald-500
  whitelabelEnabled: true,
  plan: 'Business',
  status: 'Active',
  joinedAt: new Date('2023-01-15'),
  resourcesCanReschedule: false,
  paymentsEnabled: true,
  requirePaymentMethodToBook: true,
  cancellationWindowHours: 24,
  lateCancellationFeePercent: 50,
};

// Tenant Users
export const CURRENT_USER: User = {
  id: 'u1',
  name: 'John Owner',
  email: 'john@acme-auto.com',
  role: 'owner',
  avatarUrl: 'https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80',
};

export const MANAGER_USER: User = {
  id: 'u_manager_acme',
  name: 'Manny Manager',
  email: 'manny@acme-auto.com',
  role: 'manager',
  avatarUrl: 'https://images.unsplash.com/photo-1560250097-0b93528c311a?ixlib=rb-1.2.1&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80',
};

export const STAFF_USER: User = {
  id: 'u_staff_main',
  name: 'Stacy Staff',
  email: 'stacy@acme-auto.com',
  role: 'staff',
  avatarUrl: 'https://images.unsplash.com/photo-1573496359142-b8d87734a5a2?ixlib=rb-1.2.1&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80',
};

export const RESOURCE_USER: User = {
  id: 'u_res_main',
  username: 'bay3',
  name: 'Service Bay 3',
  email: 'bay3@internal.acme-auto.com',
  role: 'resource',
  avatarUrl: 'https://images.unsplash.com/photo-1581092918056-0c9c7e344934?ixlib=rb-1.2.1&auto=format&fit=crop&w=256&h=256&q=60',
};

export const CUSTOMER_USER: User = {
  id: 'u_cust1',
  username: 'alice',
  name: 'Alice Smith',
  email: 'alice@example.com',
  role: 'customer',
  avatarUrl: 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80',
};

// Platform Users
export const SUPERUSER_USER: User = {
  id: 'u_super',
  name: 'Sarah Super',
  email: 'sarah@smoothschedule.com',
  role: 'superuser',
  avatarUrl: 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80',
};

export const PLATFORM_MANAGER_USER: User = {
  id: 'u_manager',
  name: 'Mike Manager',
  email: 'mike@smoothschedule.com',
  role: 'platform_manager',
  avatarUrl: 'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80',
};

export const PLATFORM_SUPPORT_USER: User = {
  id: 'u_support',
  name: 'Sam Support',
  email: 'sam@smoothschedule.com',
  role: 'platform_support',
  avatarUrl: 'https://images.unsplash.com/photo-1599566150163-29194dcaad36?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80',
};

const staffUserAcme: User = { id: 'u_staff_acme', name: 'Mike Mechanic', email: 'mike@acme-auto.com', role: 'staff', avatarUrl: 'https://randomuser.me/api/portraits/men/45.jpg' };
const staffUserTech: User = { id: 'u_staff_tech', name: 'Jen IT', email: 'jen@techsol.com', role: 'staff', avatarUrl: 'https://randomuser.me/api/portraits/women/44.jpg' };


export const RESOURCES: Resource[] = [
  { id: 'r1', name: 'Bay 1 (Lift)', type: 'ROOM', maxConcurrentEvents: 1 },
  { id: 'r2', name: 'Bay 2 (Lift)', type: 'ROOM', maxConcurrentEvents: 1 },
  { id: 'r3', name: 'Mike (Senior Mech)', type: 'STAFF', userId: String(staffUserAcme.id), maxConcurrentEvents: 1 },
  { id: 'r4', name: 'Stacy Staff (Diag Tech)', type: 'STAFF', userId: String(STAFF_USER.id), maxConcurrentEvents: 1 },
  { id: 'r5', name: 'Alignment Machine', type: 'EQUIPMENT', maxConcurrentEvents: 1 },
  { id: 'r6', name: 'Service Bay 3', type: 'ROOM', userId: String(RESOURCE_USER.id), maxConcurrentEvents: 1 },
];

export const SERVICES: Service[] = [
  { id: 's1', name: 'Full Synthetic Oil Change', durationMinutes: 60, price: 89.99, description: 'Premium oil and filter change.', displayOrder: 1 },
  { id: 's2', name: 'Brake Pad Replacement', durationMinutes: 120, price: 245.00, description: 'Front and rear brake pad replacement.', displayOrder: 2 },
  { id: 's3', name: 'Engine Diagnostics', durationMinutes: 90, price: 120.00, description: 'Full computer diagnostics of engine.', displayOrder: 3 },
  { id: 's4', name: 'Tire Rotation', durationMinutes: 45, price: 40.00, description: 'Rotate and balance all four tires.', displayOrder: 4 },
  { id: 's5', name: '4-Wheel Alignment', durationMinutes: 60, price: 95.50, description: 'Precision laser alignment.', displayOrder: 5 },
  { id: 's6', name: 'Tire Patch', durationMinutes: 30, price: 25.00, description: 'Repair minor tire punctures.', displayOrder: 6 },
  { id: 's7', name: 'Vehicle Inspection', durationMinutes: 60, price: 75.00, description: 'Comprehensive multi-point vehicle inspection.', displayOrder: 7 },
];

const dayOffset = (days: number) => {
  const d = new Date();
  d.setDate(d.getDate() + days);
  return d;
}

const setTimeOnDate = (date: Date, hours: number, minutes: number) => {
  const d = new Date(date);
  d.setHours(hours, minutes, 0, 0);
  return d;
};

const today = dayOffset(0);
const yesterday = dayOffset(-1);
const tomorrow = dayOffset(1);
const lastWeek = dayOffset(-7);


export const APPOINTMENTS: Appointment[] = [
  // Today for other resources
  { id: 'a1', resourceId: 'r1', customerId: 'c1', customerName: 'Alice Smith', serviceId: 's1', startTime: setTimeOnDate(today, 9, 0), durationMinutes: 60, status: 'CONFIRMED' },
  { id: 'a2', resourceId: 'r3', customerId: 'c1', customerName: 'Alice Smith', serviceId: 's7', startTime: setTimeOnDate(today, 9, 0), durationMinutes: 60, status: 'CONFIRMED' },
  { id: 'a3', resourceId: 'r2', customerId: 'c2', customerName: 'Bob Jones', serviceId: 's2', startTime: setTimeOnDate(today, 10, 30), durationMinutes: 120, status: 'CONFIRMED' },
  { id: 'a4', resourceId: 'r4', customerId: 'c3', customerName: 'Charlie Day', serviceId: 's3', startTime: setTimeOnDate(today, 13, 0), durationMinutes: 90, status: 'COMPLETED' },
  { id: 'a5', resourceId: null, customerId: 'c4', customerName: 'Dana White', serviceId: 's4', startTime: setTimeOnDate(today, 14, 0), durationMinutes: 45, status: 'PENDING' },
  { id: 'a6', resourceId: 'r5', customerId: 'c5', customerName: 'Evan Stone', serviceId: 's5', startTime: setTimeOnDate(today, 11, 0), durationMinutes: 60, status: 'CONFIRMED' },
  
  // Appointments for our Resource User (r6 / Service Bay 3)
  // Today
  { id: 'a7', resourceId: 'r6', customerId: 'c6', customerName: 'Fiona Gallagher', serviceId: 's6', startTime: setTimeOnDate(today, 15, 0), durationMinutes: 30, status: 'CONFIRMED' },
  { id: 'a8', resourceId: 'r6', customerId: 'c7', customerName: 'George Costanza', serviceId: 's7', startTime: setTimeOnDate(today, 10, 0), durationMinutes: 45, status: 'CONFIRMED' },
  { id: 'a9', resourceId: 'r6', customerId: 'c8', customerName: 'Harry Potter', serviceId: 's3', startTime: setTimeOnDate(today, 14, 0), durationMinutes: 60, status: 'CONFIRMED' },
  // Yesterday
  { id: 'a10', resourceId: 'r6', customerId: 'c9', customerName: 'Iris West', serviceId: 's5', startTime: setTimeOnDate(yesterday, 11, 0), durationMinutes: 90, status: 'COMPLETED' },
  { id: 'a11', resourceId: 'r6', customerId: 'c10', customerName: 'Jack Sparrow', serviceId: 's6', startTime: setTimeOnDate(yesterday, 14, 30), durationMinutes: 30, status: 'COMPLETED' },
  { id: 'a12', resourceId: 'r6', customerId: 'c11', customerName: 'Kara Danvers', serviceId: 's2', startTime: setTimeOnDate(yesterday, 9, 0), durationMinutes: 120, status: 'NO_SHOW' },
  // Tomorrow
  { id: 'a13', resourceId: 'r6', customerId: 'c12', customerName: 'Luke Skywalker', serviceId: 's7', startTime: setTimeOnDate(tomorrow, 10, 0), durationMinutes: 180, status: 'CONFIRMED' },

  // Past appointment for Alice Smith (CUSTOMER_USER)
  { id: 'a14', resourceId: 'r1', customerId: 'c1', customerName: 'Alice Smith', serviceId: 's1', startTime: setTimeOnDate(lastWeek, 10, 0), durationMinutes: 60, status: 'COMPLETED' }
];

export const BLOCKERS: Blocker[] = [
  { id: 'b1', resourceId: 'r6', startTime: setTimeOnDate(today, 12, 0), durationMinutes: 60, title: 'Lunch Break' },
  { id: 'b2', resourceId: 'r6', startTime: setTimeOnDate(tomorrow, 16, 0), durationMinutes: 30, title: 'Inventory Check' },
];

export const DASHBOARD_METRICS: Metric[] = [
  { label: 'Total Revenue', value: '$12,450', change: '+12%', trend: 'up' },
  { label: 'Appointments', value: '145', change: '+5%', trend: 'up' },
  { label: 'New Customers', value: '24', change: '-2%', trend: 'down' },
  { label: 'Avg. Ticket', value: '$85.90', change: '+8%', trend: 'up' },
];

const customerUserBob: User = { id: 'u_cust_bob', name: 'Bob Jones', email: 'bob@example.com', role: 'customer', avatarUrl: 'https://randomuser.me/api/portraits/men/12.jpg' };
const customerUserCharlie: User = { id: 'u_cust_charlie', name: 'Charlie Day', email: 'charlie@paddys.com', role: 'customer', avatarUrl: 'https://randomuser.me/api/portraits/men/22.jpg' };


export const CUSTOMERS: Customer[] = [
  {
    id: 'c1',
    userId: String(CUSTOMER_USER.id),
    name: 'Alice Smith',
    email: 'alice@example.com',
    phone: '(555) 123-4567',
    city: 'New York',
    state: 'NY',
    zip: '10001',
    totalSpend: 1250.50,
    lastVisit: new Date('2023-10-15'),
    status: 'Active',
    avatarUrl: 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80',
    tags: ['VIP', 'Regular'],
    paymentMethods: [
        { id: 'pm_1', brand: 'Visa', last4: '4242', isDefault: true },
        { id: 'pm_2', brand: 'Mastercard', last4: '5555', isDefault: false },
    ]
  },
  {
    id: 'c2',
    userId: String(customerUserBob.id),
    name: 'Bob Jones',
    email: 'bob.j@example.com',
    phone: '(555) 987-6543',
    city: 'Austin',
    state: 'TX',
    zip: '78701',
    totalSpend: 450.00,
    lastVisit: new Date('2023-09-20'),
    status: 'Active',
    avatarUrl: 'https://images.unsplash.com/photo-1519244703995-f4e0f30006d5?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80',
    paymentMethods: [],
  },
  {
    id: 'c3',
    userId: String(customerUserCharlie.id),
    name: 'Charlie Day',
    email: 'charlie@paddys.com',
    phone: '(555) 444-3333',
    city: 'Philadelphia',
    state: 'PA',
    zip: '19103',
    totalSpend: 89.99,
    lastVisit: new Date('2023-10-01'),
    status: 'Inactive',
    tags: ['New'],
    paymentMethods: [
        { id: 'pm_3', brand: 'Amex', last4: '0005', isDefault: true },
    ],
  },
  {
    id: 'c4',
    name: 'Dana White',
    email: 'dana@ufc.fake',
    phone: '(555) 777-8888',
    city: 'Las Vegas',
    state: 'NV',
    zip: '89109',
    totalSpend: 3200.00,
    lastVisit: new Date('2023-10-25'),
    status: 'Active',
    avatarUrl: 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80',
    tags: ['Fleet'],
    paymentMethods: [],
  },
  {
    id: 'c5',
    name: 'Evan Stone',
    email: 'evan@stone.com',
    phone: '(555) 222-1111',
    totalSpend: 150.00,
    lastVisit: null,
    status: 'Active',
    tags: ['Referral'],
    paymentMethods: [],
  },
  {
    id: 'c6',
    name: 'Fiona Gallagher',
    email: 'fiona@chicago.net',
    phone: '(555) 666-9999',
    city: 'Chicago',
    state: 'IL',
    zip: '60601',
    totalSpend: 0.00,
    lastVisit: null,
    status: 'Blocked',
    paymentMethods: [],
  },
  {
    id: 'c7',
    name: 'George Costanza',
    email: 'george@vandelay.com',
    phone: '(555) 555-5555',
    city: 'New York',
    state: 'NY',
    zip: '10001',
    totalSpend: 12.50,
    lastVisit: new Date('2023-01-10'),
    status: 'Inactive',
    paymentMethods: [],
  }
];

// --- Platform Mock Data ---

const createBiz = (overrides: Partial<Business>): Business => ({
  ...CURRENT_BUSINESS,
  ...overrides,
});


export const PLATFORM_METRICS: PlatformMetric[] = [
  { label: 'Monthly Recurring Revenue', value: '$425,900', change: '+15.2%', trend: 'up', color: 'blue' },
  { label: 'Active Businesses', value: '1,240', change: '+8.1%', trend: 'up', color: 'green' },
  { label: 'Avg. Revenue Per User', value: '$343', change: '+4.5%', trend: 'up', color: 'purple' },
  { label: 'Churn Rate', value: '2.4%', change: '-0.5%', trend: 'down', color: 'orange' },
];

export const ALL_BUSINESSES: Business[] = [
  createBiz({ ...CURRENT_BUSINESS, plan: 'Business', status: 'Active' }),
  createBiz({ id: 'b2', name: 'Prestige Worldwide', subdomain: 'prestige', primaryColor: '#000000', secondaryColor: '#ffffff', whitelabelEnabled: true, plan: 'Enterprise', status: 'Active', joinedAt: new Date('2022-11-10'), requirePaymentMethodToBook: false, cancellationWindowHours: 48, lateCancellationFeePercent: 100 }),
  createBiz({ id: 'b3', name: 'Mom & Pop Shop', subdomain: 'mompop', primaryColor: '#e11d48', secondaryColor: '#fbbf24', whitelabelEnabled: false, plan: 'Free', status: 'Active', joinedAt: new Date('2023-03-05'), requirePaymentMethodToBook: false, cancellationWindowHours: 0, lateCancellationFeePercent: 0 }),
  createBiz({ id: 'b4', name: 'Tech Solutions', subdomain: 'techsol', primaryColor: '#6366f1', secondaryColor: '#8b5cf6', whitelabelEnabled: true, plan: 'Professional', status: 'Trial', joinedAt: new Date('2023-10-20'), requirePaymentMethodToBook: true, cancellationWindowHours: 12, lateCancellationFeePercent: 25 }),
  createBiz({ id: 'b5', name: 'Inactive Biz', subdomain: 'inactive', primaryColor: '#9ca3af', secondaryColor: '#d1d5db', whitelabelEnabled: false, plan: 'Free', status: 'Suspended', joinedAt: new Date('2021-05-15'), requirePaymentMethodToBook: false, cancellationWindowHours: 24, lateCancellationFeePercent: 0 }),
];

export const SUPPORT_TICKETS: Ticket[] = [
  { id: 't101', subject: 'Cannot connect custom domain', description: 'Having issues connecting my custom domain.', ticketType: 'PLATFORM', priority: 'HIGH', status: 'OPEN', category: 'TECHNICAL', creator: 'u_owner_prestige', creatorEmail: 'brennan@prestige.com', creatorFullName: 'Brennan Huff', createdAt: '2023-10-26T09:00:00Z', updatedAt: '2023-10-26T09:00:00Z' },
  { id: 't102', subject: 'Question about invoice #4022', description: 'Need clarification on invoice charges.', ticketType: 'PLATFORM', priority: 'LOW', status: 'IN_PROGRESS', category: 'BILLING', creator: 'u1', creatorEmail: 'john@acme-auto.com', creatorFullName: 'John Owner', createdAt: '2023-10-25T14:30:00Z', updatedAt: '2023-10-25T14:30:00Z' },
  { id: 't103', subject: 'Feature request: Group bookings', description: 'Would like to request group booking feature.', ticketType: 'PLATFORM', priority: 'MEDIUM', status: 'OPEN', category: 'FEATURE_REQUEST', creator: 'u_owner_techsol', creatorEmail: 'owner@techsol.com', creatorFullName: 'Tech Solutions Owner', createdAt: '2023-10-26T11:15:00Z', updatedAt: '2023-10-26T11:15:00Z' },
  { id: 't104', subject: 'Login issues for staff member', description: 'Staff member cannot login.', ticketType: 'PLATFORM', priority: 'HIGH', status: 'RESOLVED', category: 'ACCOUNT', creator: 'u_owner_mompop', creatorEmail: 'owner@mompop.com', creatorFullName: 'Mom and Pop Owner', createdAt: '2023-10-24T16:45:00Z', updatedAt: '2023-10-24T16:45:00Z', resolvedAt: '2023-10-25T10:00:00Z' },
];

export const ALL_USERS: User[] = [
  SUPERUSER_USER,
  PLATFORM_MANAGER_USER,
  PLATFORM_SUPPORT_USER,
  CURRENT_USER, // Owner of Acme
  MANAGER_USER, // Manager of Acme
  STAFF_USER, // Staff of Acme
  RESOURCE_USER, // Resource of Acme
  { id: 'u_owner_prestige', name: 'Brennan Huff', email: 'brennan@prestige.com', role: 'owner', avatarUrl: 'https://randomuser.me/api/portraits/men/32.jpg' },
  staffUserAcme,
  staffUserTech,
  CUSTOMER_USER, // Alice
  customerUserBob,
  customerUserCharlie,
];