-- 사용자 정보 테이블
CREATE TABLE users (
    user_id BIGINT PRIMARY KEY AUTO_INCREMENT, -- 사용자 고유 ID
    email VARCHAR(255) NOT NULL UNIQUE,         -- 사용자 이메일 (중복 불가)
    password VARCHAR(255) NOT NULL,             -- 비밀번호 (암호화 권장)
    nickname VARCHAR(100),                      -- 닉네임
    phone_number VARCHAR(20) UNIQUE,         -- 전화번호
    is_phone_verified BOOLEAN DEFAULT FALSE, -- 전화번호 인증 여부
    profile_image_url VARCHAR(512),          -- 프로필 이미지 경로(URL)
    profile_image_name VARCHAR(255),         -- 실제 저장된 이미지 파일명
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP -- 가입일
);

-- 카테고리 테이블
CREATE TABLE categories (
    category_id BIGINT PRIMARY KEY AUTO_INCREMENT,   -- 카테고리 고유 ID
    user_id BIGINT NOT NULL,                         -- 카테고리를 생성한 사용자 ID
    name VARCHAR(100) NOT NULL,                      -- 카테고리 이름 (예: 음식점, 카페 등)
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,   -- 카테고리 생성 시각
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE -- 사용자 테이블과 외래키 연결
);

-- 핀 저장 테이블
CREATE TABLE user_pins (
    pin_id BIGINT PRIMARY KEY AUTO_INCREMENT,         -- 핀 고유 ID
    user_id BIGINT NOT NULL,                          -- 핀을 생성한 사용자 ID
    category_id BIGINT NOT NULL,                      -- 핀이 속한 카테고리 ID
    latitude DOUBLE,                                  -- 위도 좌표
    longitude DOUBLE,                                 -- 경도 좌표
    title VARCHAR(100) NOT NULL,                      -- 핀 이름
    description TEXT,                                 -- 핀에 대한 설명
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,    -- 핀 생성 시각
    FOREIGN KEY (user_id) REFERENCES users(user_id),  -- 사용자 외래키
    FOREIGN KEY (category_id) REFERENCES categories(category_id) ON DELETE CASCADE -- 카테고리 외래키
);

-- 핀 이미지 저장 테이블
CREATE TABLE pin_images (
    image_id BIGINT PRIMARY KEY AUTO_INCREMENT,       -- 이미지 고유 ID
    pin_id BIGINT NOT NULL,                           -- 어떤 핀에 속하는지
    image_url VARCHAR(500) NOT NULL,                  -- 이미지 URL
    file_name VARCHAR(255) NOT NULL,                  -- 원본 이미지 파일 이름
    uploaded_at DATETIME DEFAULT CURRENT_TIMESTAMP,   -- 업로드 시각
    FOREIGN KEY (pin_id) REFERENCES user_pins(pin_id) ON DELETE CASCADE
);

-- 지도 게시판
CREATE TABLE map_posts (
    post_id BIGINT PRIMARY KEY AUTO_INCREMENT,       -- 게시글 ID
    user_id BIGINT NOT NULL,                         -- 작성자 ID
    pin_id BIGINT NOT NULL,                          -- 관련 핀 ID
    title VARCHAR(255),                              -- 제목
    content TEXT,                                    -- 내용
    updated_at DATETIME,                             -- 수정일
    likes INT DEFAULT 0,                             -- 좋아요 수
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE, -- 작성자 외래키
    FOREIGN KEY (pin_id) REFERENCES user_pins(pin_id) ON DELETE CASCADE -- 핀 외래키
);

-- 댓글 테이블
CREATE TABLE comments (
    comment_id BIGINT PRIMARY KEY AUTO_INCREMENT,    -- 댓글 ID
    user_id BIGINT NOT NULL,                         -- 작성자 ID
    post_id BIGINT NOT NULL,                         -- 게시글 ID
    content TEXT,                                    -- 댓글 내용
    updated_at DATETIME,                             -- 수정일
    likes INT DEFAULT 0,                             -- 좋아요 수
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE,
    FOREIGN KEY (post_id) REFERENCES map_posts(post_id) ON DELETE CASCADE -- 게시글 외래키
);