-- ShopDB Infrastructure Restructure
-- Date: 2025-10-21
-- Description: Remove -PRINTER machines, delete infrastructure machine types,
--              and create dedicated tables for network infrastructure items

USE shopfloor;

-- ============================================================================
-- STEP 1: Create new infrastructure tables
-- ============================================================================

-- Create Access Points table
CREATE TABLE IF NOT EXISTS accesspoints (
    apid INT AUTO_INCREMENT PRIMARY KEY,
    hostname VARCHAR(100),
    ipaddress VARCHAR(45),
    description VARCHAR(255),
    maptop INT,
    mapleft INT,
    isactive BIT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Create IDFs (Intermediate Distribution Frame) table
CREATE TABLE IF NOT EXISTS idfs (
    idfid INT AUTO_INCREMENT PRIMARY KEY,
    hostname VARCHAR(100),
    ipaddress VARCHAR(45),
    description VARCHAR(255),
    maptop INT,
    mapleft INT,
    isactive BIT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Create Cameras table
CREATE TABLE IF NOT EXISTS cameras (
    cameraid INT AUTO_INCREMENT PRIMARY KEY,
    hostname VARCHAR(100),
    ipaddress VARCHAR(45),
    description VARCHAR(255),
    maptop INT,
    mapleft INT,
    isactive BIT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Create Switches table
CREATE TABLE IF NOT EXISTS switches (
    switchid INT AUTO_INCREMENT PRIMARY KEY,
    hostname VARCHAR(100),
    ipaddress VARCHAR(45),
    description VARCHAR(255),
    maptop INT,
    mapleft INT,
    isactive BIT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Create Servers table
CREATE TABLE IF NOT EXISTS servers (
    serverid INT AUTO_INCREMENT PRIMARY KEY,
    hostname VARCHAR(100),
    ipaddress VARCHAR(45),
    description VARCHAR(255),
    maptop INT,
    mapleft INT,
    isactive BIT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================================================
-- STEP 2: Remove -PRINTER machines from machines table
-- ============================================================================

-- Delete all machines with names ending in -PRINTER
-- These were placeholder entries for network map and are being moved to dedicated tables
DELETE FROM machines WHERE machinenumber LIKE '%-PRINTER';

-- ============================================================================
-- STEP 3: Remove infrastructure machine types from machinetypes table
-- ============================================================================

-- Delete machine types that are now handled by dedicated tables
-- Note: Printer machine type removed as printers table already exists separately
DELETE FROM machinetypes WHERE machinetype IN (
    'Printer',
    'Access Point',
    'IDF',
    'Camera',
    'Switch',
    'Server'
);

-- ============================================================================
-- Verification Queries (commented out - uncomment to verify changes)
-- ============================================================================

-- Verify new tables exist
-- SELECT TABLE_NAME FROM information_schema.TABLES
-- WHERE TABLE_SCHEMA = 'shopfloor'
-- AND TABLE_NAME IN ('accesspoints', 'idfs', 'cameras', 'switches', 'servers');

-- Verify -PRINTER machines removed
-- SELECT COUNT(*) as remaining_printer_machines FROM machines WHERE machinenumber LIKE '%-PRINTER';

-- Verify infrastructure machine types removed
-- SELECT machinetypeid, machinetype FROM machinetypes ORDER BY machinetypeid;

-- View structure of new tables
-- DESCRIBE accesspoints;
-- DESCRIBE idfs;
-- DESCRIBE cameras;
-- DESCRIBE switches;
-- DESCRIBE servers;
