-- =======================================================
-- USER TABLE
-- =======================================================
CREATE TABLE users(
    id              SERIAL          PRIMARY KEY,
    username        VARCHAR(50)     UNIQUE NOT NULL,
    password_hash   TEXT            NOT NULL,
    email           VARCHAR(255)    UNIQUE
);


-- =======================================================
-- MENU ITEM TABLE
-- =======================================================
CREATE TABLE menu(
    id              SERIAL          PRIMARY KEY,
    name            VARCHAR(250)    NOT NULL,
    description     TEXT,
    price           NUMERIC         NOT NULL CHECK (price > 0),
    category        VARCHAR(50)
);


-- =======================================================
-- ORDER TABLE
-- =======================================================
CREATE TABLE orders(
    id          SERIAL      PRIMARY KEY,
    user_id     INT         NOT NULL,
    created_at  TIMESTAMP   NOT NULL ,
    total_price NUMERIC     NOT NULL,

    FOREIGN KEY (user_id) REFERENCES users(id)
);


-- =======================================================
-- ORDER DETAIL TABLE
-- =======================================================
CREATE TABLE order_details(
    id          SERIAL  PRIMARY KEY ,
    order_id    INT     NOT NULL ,
    menu_id     INT     NOT NULL ,
    quantity    NUMERIC NOT NULL        CHECK (quantity > 0),
    item_price  NUMERIC NOT NULL,

    FOREIGN KEY (order_id) REFERENCES orders(id),
    FOREIGN KEY (menu_id) REFERENCES menu(id)
);


-- =======================================================
-- INITIAL MENU DATA
-- =======================================================
-- id is left out because it has SERIAl type and auto-generates.
INSERT INTO menu (name, description, price, category) VALUES
    ('Margherita Pizza',      'Classic tomato, mozzarella, and basil',        9.99,  'Pizza'),
    ('Grilled Chicken Wrap',  'Chicken, lettuce, tomato, garlic sauce',       7.49,  'Wraps'),
    ('Caesar Salad',          'Romaine, parmesan, croutons, caesar dressing', 6.99,  'Salads'),
    ('Beef Burger',           'Beef patty, cheddar, lettuce, brioche bun',    8.99,  'Burgers'),
    ('Spaghetti Carbonara',   'Pasta, egg, pancetta, parmesan',              10.49,  'Pasta'),
    ('Veggie Spring Rolls',   'Crispy rolls with mixed vegetables',           5.49,  'Appetizers'),
    ('Chocolate Lava Cake',   'Warm cake with molten chocolate center',       4.99,  'Dessert'),
    ('Iced Latte',            'Espresso with cold milk over ice',             3.49,  'Beverages'),
    ('Mushroom Risotto',      'Creamy arborio rice with wild mushrooms',      9.49,  'Pasta'),
    ('Fish Tacos',            'Grilled fish, cabbage slaw, chipotle mayo',    8.49,  'Tacos');


-- =======================================================
-- OPTIONAL TEST DATA
-- =======================================================



-- =======================================================
-- VERIFICATION QUERIES
-- =======================================================
-- SELECT * FROM users;
-- SELECT * FROM menu;
-- SELECT * FROM orders;
-- SELECT * FROM order_details;