export class Workout {
  private _id?: string;
  private _name?: string;
  private _description?: string;
  private _duration?: number;
  private _image?: string;
  private _video?: string;
  private _nbSeries?: number;
  private _nbRepetitions?: number;

  constructor({
    id,
    name,
    description,
    duration,
    image,
    video,
    nbSeries,
    nbRepetitions,
  }: {
    id?: string;
    name?: string;
    description?: string;
    duration?: number;
    image?: string;
    video?: string;
    nbSeries?: number;
    nbRepetitions?: number;
  } = {}) {
    this._id = id;
    this._name = name;
    this._description = description;
    this._duration = duration;
    this._image = image;
    this._video = video;
    this._nbSeries = nbSeries;
    this._nbRepetitions = nbRepetitions;
  }

  // Getters
  get id(): string | undefined {
    return this._id;
  }

  get name(): string | undefined {
    return this._name;
  }

  get description(): string | undefined {
    return this._description;
  }

  get duration(): number | undefined {
    return this._duration;
  }

  get image(): string | undefined {
    return this._image;
  }

  get video(): string | undefined {
    return this._video;
  }

  get nbSeries(): number | undefined {
    return this._nbSeries;
  }

  get nbRepetitions(): number | undefined {
    return this._nbRepetitions;
  }

  // Setters
  set id(value: string | undefined) {
    this._id = value;
  }

  set name(value: string | undefined) {
    this._name = value;
  }

  set description(value: string | undefined) {
    this._description = value;
  }

  set duration(value: number | undefined) {
    this._duration = value;
  }

  set image(value: string | undefined) {
    this._image = value;
  }

  set video(value: string | undefined) {
    this._video = value;
  }

  set nbSeries(value: number | undefined) {
    this._nbSeries = value;
  }

  set nbRepetitions(value: number | undefined) {
    this._nbRepetitions = value;
  }

  static fromJson(json: any): Workout {
    return new Workout({
      id: json.id,
      name: json.name,
      description: json.description,
      duration: json.duration,
      image: json.image,
      video: json.video,
      nbSeries: json.nbSeries,
      nbRepetitions: json.nbRepetitions,
    });
  }
}
