


CREATE TABLE mod_appointments_services (
   mod_apt_srv_id INT AUTO_INCREMENT PRIMARY KEY,       -- Identificador único del servicio
   mod_apt_srv_acu_id INT NOT NULL,                -- ID del proveedor (relación con mod_appointments_users)
   mod_apt_srv_name VARCHAR(255) NOT NULL,              -- Nombre del servicio
   mod_apt_srv_description TEXT,                        -- Descripción del servicio
   mod_apt_srv_duration INT NOT NULL,                   -- Duración del servicio en minutos
   mod_apt_srv_price DECIMAL(10,2) NOT NULL,            -- Precio del servicio
   mod_apt_srv_ent_id INT NOT NULL,  
   mod_apt_srv_state BOOLEAN DEFAULT TRUE,              -- Estado del servicio (activo/inactivo)
   FOREIGN KEY (mod_apt_srv_provider_id) REFERENCES mod_appointments_users(mod_apt_usr_id) -- Relación con proveedores
) COMMENT 'Tabla de servicios ofrecidos por los proveedores';

CREATE TABLE mod_appointments_schedules (
   mod_apt_sch_id INT AUTO_INCREMENT PRIMARY KEY,       -- Identificador único del horario
   mod_apt_sch_acu_id INT NOT NULL,                -- ID del proveedor (relación con mod_appointments_users)
   mod_apt_sch_day INT NOT NULL, -- Día de la semana
   mod_apt_sch_hour_start TIME NOT NULL,                -- Hora de inicio de disponibilidad
   mod_apt_sch_hour_end TIME NOT NULL,  
   mod_apt_sch_user_id INT NOT NULL,                   -- Hora de fin de disponibilidad
   mod_apt_sch_ent_id INT NOT NULL,                   -- Hora de fin de disponibilidad
   mod_apt_sch_state BOOLEAN DEFAULT TRUE,              -- Estado del horario (activo/inactivo)
   FOREIGN KEY (mod_apt_sch_provider_id) REFERENCES mod_appointments_users(mod_apt_usr_id) -- Relación con usuarios proveedores
) COMMENT 'Tabla de disponibilidad de los proveedores por días de la semana y horas';


CREATE TABLE mod_appointments (
   mod_apt_id INT AUTO_INCREMENT PRIMARY KEY,           -- Identificador único de la cita
   mod_apt_cep_id INT NOT NULL,                      -- ID del cliente (relación con mod_appointments_users)
   mod_apt_acu_id INT NOT NULL,                    -- ID del proveedor (relación con mod_appointments_users)
   mod_apt_srv_id INT NOT NULL,                         -- ID del servicio (relación con mod_appointments_services)
   mod_apt_sch_id INT NOT NULL,                         -- ID del horario (relación con mod_appointments_schedules)
   mod_apt_date DATE NOT NULL,                          -- Fecha de la cita
   mod_apt_time TIME NOT NULL,                          -- Hora de la cita
   mod_apt_ent_id INT NOT NULL,  
   mod_apt_status ENUM('pending', 'confirmed', 'completed', 'cancelled') DEFAULT 'pending', -- Estado de la cita
   created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,      -- Fecha de creación de la cita
   updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- Última actualización
   FOREIGN KEY (mod_apt_client_id) REFERENCES mod_appointments_users(mod_apt_usr_id), -- Relación con clientes
   FOREIGN KEY (mod_apt_provider_id) REFERENCES mod_appointments_users(mod_apt_usr_id), -- Relación con proveedores
   FOREIGN KEY (mod_apt_srv_id) REFERENCES mod_appointments_services(mod_apt_srv_id), -- Relación con los servicios
   FOREIGN KEY (mod_apt_sch_id) REFERENCES mod_appointments_schedules(mod_apt_sch_id) -- Relación con horarios
) COMMENT 'Tabla principal de citas, con información del cliente, proveedor, servicio y horario';


CREATE TABLE mod_appointments_payments (
   mod_apt_pay_id INT AUTO_INCREMENT PRIMARY KEY,       -- Identificador único del pago
   mod_apt_pay_apt_id INT NOT NULL,                     -- ID de la cita (relación con mod_appointments)
   mod_apt_pay_amount DECIMAL(10,2) NOT NULL,           -- Monto del pago
   mod_apt_pay_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,-- Fecha y hora del pago
   mod_apt_pay_method ENUM('credit_card', 'paypal', 'stripe') NOT NULL, -- Método de pago
   mod_apt_pay_status ENUM('pending', 'completed', 'failed') DEFAULT 'pending', -- Estado del pago
   FOREIGN KEY (mod_apt_pay_apt_id) REFERENCES mod_appointments(mod_apt_id) -- Relación con la cita
) COMMENT 'Tabla de pagos, con información sobre los pagos realizados por los clientes';


CREATE TABLE mod_appointments_reviews (
   mod_apt_rev_id INT AUTO_INCREMENT PRIMARY KEY,       -- Identificador único de la reseña
   mod_apt_rev_apt_id INT NOT NULL,                     -- ID de la cita (relación con mod_appointments)
   mod_apt_rev_client_id INT NOT NULL,                  -- ID del cliente (relación con mod_appointments_users)
   mod_apt_rev_provider_id INT NOT NULL,                -- ID del proveedor (relación con mod_appointments_users)
   mod_apt_rev_rating INT CHECK (mod_apt_rev_rating BETWEEN 1 AND 5), -- Calificación (1-5)
   mod_apt_rev_comment TEXT,                            -- Comentario del cliente
   created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,      -- Fecha de la reseña
   FOREIGN KEY (mod_apt_rev_apt_id) REFERENCES mod_appointments(mod_apt_id), -- Relación con la cita
   FOREIGN KEY (mod_apt_rev_client_id) REFERENCES mod_appointments_users(mod_apt_usr_id), -- Relación con el cliente
   FOREIGN KEY (mod_apt_rev_provider_id) REFERENCES mod_appointments_users(mod_apt_usr_id) -- Relación con el proveedor
) COMMENT 'Tabla de reseñas y valoraciones de los servicios por parte de los clientes';
